MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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)));

エポックからのミリ秒数を手動で計算する必要がないため、コードの可読性が大幅に向上し、日付指定のミスも防止できます。実際の開発現場では、こちらの方法が推奨されています。


  1. JSPで日付を解析する方法|fmt:parseDateタグの使い方と属性一覧

    JSPで文字列として表現された日付データをDateオブジェクトに変換したい場合、JSTL(JSP Standard Tag Library)が提供する<fmt:parseDate>タグを使用します。このタグを使うことで、指定したパターンやロケールに従って日付文字列を正確に解析できます。fmt:parseDateタグの主な属性<fmt:parseDate>タグには、以下の属性が用意されています。属性説明必須デフォルト値value解析対象となる日付の値いいえタグのボディtypeDATE(日付)、TIME(時刻)、BOTH(両方)のいずれかを指定いいえdatedateStyl

  2. JSPで日付をフォーマットする方法!fmt:formatDateタグの使い方を徹底解説

    JSTL(JSP Standard Tag Library)には、日付や時刻をさまざまな形式で表示するための<fmt:formatDate>タグが用意されています。このタグを使うことで、Javaコードを直接記述することなく、JSPページ内で簡単に日付の整形が可能です。fmt:formatDateタグの主な属性<fmt:formatDate>タグでは、以下の属性を指定できます。属性説明必須デフォルト値value表示する日付の値はいなしtypeDATE(日付のみ)、TIME(時刻のみ)、BOTH(両方)のいずれかいいえdatedateStyleFULL、LONG、MEDIU