検索
連載

Java Tips:現在の日時をデータベースに登録するにはJAVA Developer

フォームから受け取ったデータをデータベースに登録(挿入)する場合、フォームのデータとは別に、現在の日時を含めたい時がある。この方法には、プログラムで現在の日時データをSQL文に埋め込む方法と、SQL文にデータベースの対応する関数を指定する方法が挙げられる。

Share
Tweet
LINE
Hatena

java.sql.Timestampクラスを使う

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 日付と時刻を登録するデータベースのデータ型は,データベースによって多少の違いがあります。ここでは多くのデータベースがサポートしているtimestamp型を使用し,次に示すSQL文でテーブルを定義します。動作を確認したデータベースはMySQLですが,基本的にほかのデータベースでも利用できます(JDBCドライバの設定を除く)。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 このmailmagazineテーブルに対し,データを登録することを考えて見ましょう。

 Javaには現在の日時を取得する方法としては,System#currentTimeMillisメソッドを使う方法や,java.util.Calendarクラスを使う方法などがあります。JDBCでは,データベースのtimestamp型に対応するクラスとしてjava.sql.Timestampクラスを用意しています。Timestampクラスのコンストラクタは,時間を表すlong値(ミリ秒)がパラメータですから,ここではSystem#currentTimeMillisメソッドを利用します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 実際にmailに"abcdefgh@softbank.co.jp"をセットして実行し,MySQLのコンソールでデータを確認します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 データを登録した時点での時間が挿入されていることがわかります。なお,setTimestamp(int, Timestamp)を使った場合はタイムゾーンによる影響を受けません。Timestampクラスのコンストラクタで設定した値がSQLのtimestamp型に変換され,そのままデータベースに登録されます。

CURRENT_TIMESTAMP関数を使う

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 主要なデータベースでは,現在の日時を取得する関数としてCURRENT_TIMESTAMP関数を利用できます。いくつかのデータベースは現在の日時を取得する独自の関数も用意していますが,ポータビリティを考慮するとANSIで規定されているCURRENT_TIMESTAMP関数を利用するほうがよいでしょう。

 CURRENT_TIMESTAMP関数を使う場合は,SQL文にそのまま記述するだけです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 今度はmailに"testtest@softbank.co.jp"をセットして実行し,さきほどと同じようにMySQLのコンソールで登録されたデータを確認します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 リスト1と同じようにデータを登録した時点での時間が挿入されていることがわかります。リスト1とリスト2の基本的な違いは,リスト1が登録する日時がSQLを発行する前の日時なのに対し,リスト2はSQLが実行されデータベースの登録直前の日時が登録されるところです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

ページトップに戻る