こんばんは、Java初心者です。preparestatementメソッド使ってDBにテータを登録しているのですがDBのカラムのデータ型が日付型で登録したいデータがStringの時、登録するにはどうすれば宜しいでしょうか?yyyy/MM/dd HH:mm:ssの形で現在の日時を登録するのが目的なのですが、なかなか解決できずに困っております。未熟者で恐縮ですが、何卒よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
日付型の列に日時を登録するには、Timestamp
(java.sql.Timestamp)
クラスを使用するのが良いでしょう。
下記のサンプルは、update
の書き方の例です。
lang
1// Java7以降の書き方 2 3// import java.sql.*; 4 5String url = "" /* TODO url */; 6String user = "" /* TODO user */; 7String password = "" /* TODO password */; 8String sql = "update table1 set updated = ? where id = ?"; 9 10Timestamp updatedTS = new Timestamp(0L) /* TODO Timestamp */; 11long id = 0L; 12try { 13 try (Connection conn = DriverManager.getConnection(url, user, password); 14 PreparedStatement stmt = conn.prepareStatement(sql)) { 15 stmt.setTimestamp(1, updatedTS); 16 stmt.setLong(2, id); 17 stmt.executeUpdate(); 18 } 19} catch (SQLException e) { 20 // TODO エラー時の処理 21 e.printStackTrace(); 22}
日付文字列からTimestamp
を生成するには、いくつか方法があります。
ここでは、標準ライブラリーだけを使うものについてご紹介します。
(1). DateFormat
でDate
に変換してから、Timestamp
のコンストラクターを使う
(2). Timestamp.valueOf(String)
を使う
(3). DateTimeFormatter``Timestamp.valueOf(LocalDateTime)
を使う (Java8以降)
(1). DateFormat
でjava.util.Date
に変換してから、Timestamp
のコンストラクターを使う
最も良く知られた方法だと思います。SimpleDateFormat
の代わりにorg.apache.commons.lang.time.DateUtils
を使う場合もあります。
java.text.SimpleDateFormat - Java SE 8 APIドキュメント
Timestamp(long) - Java SE 8 APIドキュメント
lang
1// import java.sql.Timestamp; 2// import java.text.SimpleDateFormat; 3 4String dateTimeString = "2015/02/06 12:34:56"; 5 6SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 7Date d = df.parse(dateTimeString); // throws ParseException 8Timestamp ts = new Timestamp(d.getTime()); 9System.out.println(ts);
(2). Timestamp.valueOf(String)
を使う
これが最も簡単な方法ですが、フォーマットがyyyy-mm-dd hh:mm:ss
に限定されます。
java.sql.Timestamp.valueOf(String) - Java SE 8 APIドキュメント
lang
1// import java.sql.Timestamp; 2 3String dateTimeString1 = "2015/02/06 12:34:56"; 4Timestamp ts1 = Timestamp.valueOf(dateTimeString1); 5System.out.println(ts1); 6// => NG: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] 7 8String dateTimeString2 = "2015-02-06 12:34:56"; 9Timestamp ts2 = Timestamp.valueOf(dateTimeString2); 10System.out.println(ts2); 11// => OK
(3). DateTimeFormatter
でLocalDateTime
に変換し、Timestamp.valueOf(LocalDateTime)
を使う (Java8以降)
Java8以降では、新しい日時APIが搭載され、Timestamp
もそれに対応しています。
java.time.format.DateTimeFormatter.parse(CharSequence) - Java SE 8 APIドキュメント
java.time.LocalDateTime.parse(CharSequence, java.time.format.DateTimeFormatter) - Java SE 8 APIドキュメント
java.sql.Timestamp.valueOf(java.time.LocalDateTime) - Java SE 8 APIドキュメント
lang
1// Java8以降 2 3// import java.sql.Timestamp; 4// import java.time.LocalDateTime; 5// import java.time.format.DateTimeFormatter; 6// import java.time.temporal.TemporalAccessor; 7 8String dateTimeString = "2015/02/06 12:34:56"; 9 10DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); 11LocalDateTime ldt = LocalDateTime.parse(dateTimeString, dtf); // throws DateTimeParseException 12Timestamp ts = Timestamp.valueOf(ldt);
投稿2015/02/06 02:03
総合スコア9396
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。