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