JPAを使用してJavaの日付をMysqlの日時に格納する方法


104

Java DateをMysql datetimeに保存するにはどうすればよいですか?

私がそうしようとすると...日付のみが保存され、時間がMysql日付ストアに00:00:00のまま残ります...

2009-09-22 00:00:00

日付だけでなく時間も欲しい...みたい

2009-09-22 08:08:11

Spring mydomainクラスでJPA(Hibernate)を使用していますが、java.util.Dateを使用していますが、手書きのクエリを使用してテーブルを作成しています...

これは私の作成文です

CREATE TABLE ContactUs (id BIGINT auto_increment, 
                        userName VARCHAR(30), 
                        email VARCHAR(50), 
                        subject VARCHAR(100), 
                        message VARCHAR(1024), 
                        messageType VARCHAR(15), 
                        contactUsTime datetime, 
                        primary key(id))
                        TYPE=InnoDB;

あなたのコードの一部、おそらく?
Bozho


1
最近はもう使用すべきではありませんjava.util.Date(2010年にはおそらくこれ以上の選択肢はありませんでした)。保存する必要がある日時の正確な要件に応じて、java.time.Instantまたはのような最新のクラスを使用する方が良いjava.time.LocalDateTimeでしょう。
Ole VV

これらの古い回答のいくつかは、Googleランキングでかなり高くなっています。Java 8以降では、@ Temporalを使用して日時形式で保存する代わりに、LocalDateTimeを使用して日時を保存できます
HopeKing

prepareStatement.setTimestamp(1、new Timestamp(System.currentTimeMillis()));
Rajat

回答:


165

リンクを参照してください:

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

次のコードは問題を解決しました:

java.util.Date dt = new java.util.Date();

java.text.SimpleDateFormat sdf = 
     new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String currentTime = sdf.format(dt);

この ' currentTime 'は、タイプがDateTimeである列に挿入され、成功しました。


4
しかし、currentTimeはStringオブジェクトであり、dbではdatetimeをデータ型として取得します。これは挿入されないと思います。
reddy 2014年

yyyy-MM-dd HH:mm:ssはとても重要です。大文字の使用に注意してください。
ビニアム2015

91

次のように、フィールド(またはゲッター)にで注釈を付けます@Temporal(TemporalType.TIMESTAMP)

public class MyEntity {
    ...
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date myDate;
    ...
}

これでうまくいくはずです。


2
これがまさに答えです!
Perneel 2013

2
これについては、これが適切な答えです。
ライアン、

3
このソリューションを選択した場合、dbからフェッチしたときに日付がタイムスタンプとして表示されることに注意してください。「yyyy-MM-dd ....」という適切な形式にはなりません)
jon

37

おそらく使用していjava.sql.Dateますか?これは、Javaクラス(ミリ秒のサブクラスでありjava.util.Date、設計上の誤った決定)としての粒度がミリ秒ですが、JDBCドライバーによって、時刻コンポーネントのない日付として解釈されます。java.sql.Timestamp代わりに使用する必要があります。


1
私は、java.sql.Dateまたはjava.sql.Timestampドメインクラスでは使用しませんが、これはOPの編集前に記述されたと思います。
Pascal Thivent

私は...するだろう。java.util.Dateオブジェクトは、完全に予測可能な結果を​​持つjava.sql.Timestampオブジェクトと比較されません。
Doug Moscrop、2011

8

おそらくあなたのJavaの日付はmysql formatYYYY-MM-DD HH:MM:SS)とは異なるフォーマットを持っているためです

これを行う

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 Date date = new Date();
 System.out.println(dateFormat.format(date));

参照で正しい形式に言及し、コードで間違った形式を使用しました。
Merric Huffstutler、

6

2011-07-18 +時間形式を取得します

long timeNow = Calendar.getInstance().getTimeInMillis();
java.sql.Timestamp ts = new java.sql.Timestamp(timeNow);
...
preparedStatement.setTimestamp(TIME_COL_INDEX, ts);

5

mysql datetime-> GregorianCalendar

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
System.out.println(calendar.getTime());

GregorianCalendar-> mysql datetime

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = format.format(calendar.getTime());
System.out.println(string);

4
java.util.Date date = new Date();
Object param = new java.sql.Timestamp(date.getTime());    
preparedStatement.setObject(param);

1

次のコードを使用して、MySQLに日付を挿入します。MySqlの要件を満たすように日付の形式を変更する代わりに、データベースを設定して日付を認識させることができます。STR_TO_DATE(?, '%l:%i %p')パラメーターをことます。

たとえば、2014-03-12は次のように表すことができます STR_TO_DATE('2014-03-12', '%Y-%m-%d')

preparedStatement = connect.prepareStatement("INSERT INTO test.msft VALUES (default, STR_TO_DATE( ?, '%m/%d/%Y'), STR_TO_DATE(?, '%l:%i %p'),?,?,?,?,?)"); 

1

この回答の非常に単純な条件はmysqlにありますが列のデータ型はdatetimeであり、Javaコードからmysqlにデータを送信します。

java.util.Date dt = new java.util.Date();
whatever your code object may be.setDateTime(dt);

重要なことは、日付を選択するだけであり、その形式はすでにmysql形式に従って送信しており、それ以上の変更は必要ありません。


0

実際にはSimpleDateFormatを使用しない場合があります。次のようなものを使用できます。

  @JsonSerialize(using=JsonDateSerializer.class)
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
  private Date blkDate;

このようにして、指定した形式で日付を直接取得できます。


0

私はまだ1行の方法を好みます

new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())

-2

わたしにはできる !!

mysqlテーブル

DATETIME

エンティティ内:

private Date startDate;

進行中:

objectEntity.setStartDate(new Date());

準備されたステートメント:

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.