JDBCで日付を扱う方法とは?setDate()メソッドの使い方を実例付きで解説
JDBCで日付を扱う基本
SQLではDATE型を使用することで、日付の値をデータベースに挿入できます。Javaではjava.sql.DateクラスがSQLのDATE型にマッピングされており、このクラスを通じて日付データをやり取りします。
日付を挿入する際に活躍するのが、PreparedStatementインターフェースが提供するsetDate()メソッドです。このメソッドを使えば、SQLインジェクションを防ぎながら、テーブルに安全に日付値を登録できます。
setDate()メソッドの引数
setDate()メソッドは、次の2つのパラメータを受け取ります。
parameterIndex:日付値を設定する対象のプレースホルダー(?)の位置を示す整数(インデックス番号)。
Dateオブジェクト:渡したい日付値そのもの。java.sql.Dateクラスのコンストラクタは、エポック(基準時刻:1970年1月1日 00:00:00 GMT)からの経過ミリ秒数を表すlong型の値を受け取ります。
実装例
ここでは、MySQLデータベースに以下の構造を持つ「Emp」テーブルが作成済みであると仮定します。
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | DOB | date | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
続いて、このテーブルにレコードを挿入するJDBCプログラムの例を見てみましょう。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Date;
public class InsertingDate {
public static void main(String args[]) throws Exception {
// データベースへの接続を取得
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("接続が確立されました......");
// テーブルへ値を挿入
String query = "INSERT INTO Emp(Name, DOB, Location) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "Amit");
pstmt.setDate(2, new Date(622790105000L));
pstmt.setString(3, "Hyderabad");
pstmt.execute();
pstmt.setString(1, "Sumith");
pstmt.setDate(2, new Date(620611200000L));
pstmt.setString(3, "Vishakhapatnam");
pstmt.execute();
pstmt.setString(1, "Sudha");
pstmt.setDate(2, new Date(336614400000L));
pstmt.setString(3, "Vijayawada");
pstmt.execute();
System.out.println("レコードを挿入しました......");
}
}実行結果
接続が確立されました...... レコードを挿入しました......
MySQL側でテーブルの内容を確認すると、日付が正しく登録されていることがわかります。
mysql> select * from Emp; +--------+------------+----------------+ | Name | DOB | Location | +--------+------------+----------------+ | Amit | 1989-09-26 | Hyderabad | | Sumith | 2019-03-19 | Vishakhapatnam | | Sudha | 2019-03-19 | Vijayawada | +--------+------------+----------------+ 3 rows in set (0.00 sec)
補足:Java 8以降ならLocalDateが便利
Java 8以降の環境では、java.time.LocalDateを利用すると、より直感的に日付を指定できます。Date.valueOf(LocalDate)メソッドを使えば、LocalDateオブジェクトからjava.sql.Dateへ簡単に変換可能です。
import java.time.LocalDate; pstmt.setDate(2, Date.valueOf(LocalDate.of(1989, 9, 26)));
エポックからのミリ秒数を手動で計算する必要がないため、コードの可読性が大幅に向上し、日付指定のミスも防止できます。実際の開発現場では、こちらの方法が推奨されています。
-
JSPで日付を解析する方法|fmt:parseDateタグの使い方と属性一覧
JSPで文字列として表現された日付データをDateオブジェクトに変換したい場合、JSTL(JSP Standard Tag Library)が提供する<fmt:parseDate>タグを使用します。このタグを使うことで、指定したパターンやロケールに従って日付文字列を正確に解析できます。fmt:parseDateタグの主な属性<fmt:parseDate>タグには、以下の属性が用意されています。属性説明必須デフォルト値value解析対象となる日付の値いいえタグのボディtypeDATE(日付)、TIME(時刻)、BOTH(両方)のいずれかを指定いいえdatedateStyl
-
JSPで日付をフォーマットする方法!fmt:formatDateタグの使い方を徹底解説
JSTL(JSP Standard Tag Library)には、日付や時刻をさまざまな形式で表示するための<fmt:formatDate>タグが用意されています。このタグを使うことで、Javaコードを直接記述することなく、JSPページ内で簡単に日付の整形が可能です。fmt:formatDateタグの主な属性<fmt:formatDate>タグでは、以下の属性を指定できます。属性説明必須デフォルト値value表示する日付の値はいなしtypeDATE(日付のみ)、TIME(時刻のみ)、BOTH(両方)のいずれかいいえdatedateStyleFULL、LONG、MEDIU