この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
java.sql.Date 使ったことなかったのでjava.util.Dateと何が違うのか調べました。 調べて分かったのは java.sql.Dateは PreparedStatement に値を渡すときに使うようです。java.sql.Dateを使ったプログラムを実際にプログラムを作ってみました。DBはMySQLを使っています。
試してみる
以下はサンプルのテーブルのcreate table文になります。MySQLのDATETIME型は日付と時間の情報を持っています。ミリ秒まで保持したい場合はDATETIME(3)と指定する必要があります。
create table sample(
column1 DATETIME(3)
);
日時を登録するだけのプログラムです。最初にjava.sql.Date 型を使った場合、MySQLに登録されたのは日付の情報のみで時分秒の情報は0になっていました。 時間情報も保存したい場合は java.sql.Timestamp 型を使ったところ保存できました。下のサンプルでは区別がつくようにDate型は現在時刻、Timestamp型の現在時刻から1日引いたもの2件のレコードを登録しています。
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
import java.util.Calendar;
public class SampleDate {
public static void main(String[] args) {
try {
Date sqlDate = new Date(Calendar.getInstance().getTimeInMillis());
Timestamp timestamp = new Timestamp(Calendar.getInstance().getTimeInMillis() - 1000*60*60*24);
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://[サーバ]:[ポート]/[DB名]?user=[ユーザ名]&password=[パスワード]");
PreparedStatement statement = connection.prepareStatement("insert into sample values ( ? );");
// java.sql.Date を使った場合
statement.setDate( 1, sqlDate );
statement.execute();
// java.sql.Timestamp を使った場合
statement.setTimestamp( 1, timestamp);
statement.execute();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
MySQLに接続するためにはJDBCドライバが必要になります。以下からダウンロードしてビルドパスに追加しましょう。
MySQL :: Download Connector/J
確認する
以下が確認用のSQLになります。Dateの場合は日付の情報のみでTimestampの場合は時分秒ミリ秒まで保存できていることを確認しました。
select DATE_FORMAT(column1,'%Y/%m/%d %H:%i:%S.%f') from sample;