質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

11180閲覧

java初心者です。preparestatementメソッドを使ってDBにテータを登録しているのですが、、、、

ComSatooooshi

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2015/02/05 15:25

こんばんは、Java初心者です。preparestatementメソッド使ってDBにテータを登録しているのですがDBのカラムのデータ型が日付型で登録したいデータがStringの時、登録するにはどうすれば宜しいでしょうか?yyyy/MM/dd HH:mm:ssの形で現在の日時を登録するのが目的なのですが、なかなか解決できずに困っております。未熟者で恐縮ですが、何卒よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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). DateFormatDateに変換してから、Timestampのコンストラクターを使う
(2). Timestamp.valueOf(String)を使う
(3). DateTimeFormatter``Timestamp.valueOf(LocalDateTime)を使う (Java8以降)

(1). DateFormatjava.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). DateTimeFormatterLocalDateTimeに変換し、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

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問