Cara menyimpan Tanggal Jawa ke datetime Mysql dengan JPA

104

Dapatkah seseorang memberi tahu saya bagaimana saya dapat menyimpan Tanggal Java ke tanggal waktu Mysql ...?

Ketika saya mencoba melakukannya ... hanya tanggal yang disimpan dan waktu tersisa 00:00:00 di toko tanggal Mysql seperti ini ...

2009-09-22 00:00:00

Aku tidak hanya ingin kencan tapi juga waktu ... suka

2009-09-22 08:08:11

Saya menggunakan JPA (Hibernate) dengan musim semi kelas mydomain menggunakan java.util.Date tetapi saya telah membuat tabel menggunakan kueri tulisan tangan ...

ini adalah pernyataan buat saya

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;
Urvish
sumber
potongan kode Anda, mungkin?
Bozho
1
Hari-hari ini Anda seharusnya tidak lagi menggunakan java.util.Datesama sekali (pada tahun 2010 mungkin tidak ada pilihan yang lebih baik). Lebih baik menggunakan kelas modern, seperti java.time.Instantatau java.time.LocalDateTime, tergantung pada persyaratan pasti untuk tanggal-waktu yang Anda butuhkan untuk menyimpan.
Ole VV
Beberapa dari jawaban lama ini muncul cukup tinggi di peringkat Google. Di Java 8+ kita cukup menggunakan LocalDateTime untuk menghemat datetime daripada menggunakan @Temporal untuk menyimpan dalam format datetime
HopeKing
preparedStatement.setTimestamp (1, Timestamp baru (System.currentTimeMillis ()));
Rajat

Jawaban:

165

lihat di link:

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

Kode berikut baru saja menyelesaikan masalah:

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);

' Saat ini ' ini dimasukkan ke dalam kolom yang tipenya adalah DateTime dan berhasil.

Haim Evgi
sumber
4
tetapi, currentTime adalah objek String, dan di db kami mengambil datetime sebagai tipe data, saya pikir itu tidak akan dimasukkan. kan?
reddy
yyyy-MM-dd HH:mm:sssangat penting. Perhatikan kapitalisasi.
biniam
91

Beri anotasi bidang Anda (atau pengambil) dengan @Temporal(TemporalType.TIMESTAMP), seperti ini:

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

Itu seharusnya berhasil.

Pascal Thivent
sumber
2
Inilah jawabannya!
Perneel
2
Untuk ini, inilah jawaban yang tepat.
Ryan
3
Perhatikan bahwa jika Anda memilih solusi ini, tanggal Anda akan muncul sebagai stempel waktu saat diambil dari db. Ini tidak akan memiliki format yang bagus 'yyyy-MM-dd ....')
jon
37

Apakah Anda mungkin menggunakan java.sql.Date? Meskipun memiliki perincian milidetik sebagai kelas Java (ini adalah subkelas dari java.util.Date, keputusan desain yang buruk), ini akan ditafsirkan oleh driver JDBC sebagai tanggal tanpa komponen waktu. Anda harus menggunakan java.sql.Timestampsebagai gantinya.

Michael Borgwardt
sumber
1
Saya tidak akan menggunakan java.sql.Dateatau java.sql.Timestampdi kelas domain tapi saya rasa ini ditulis sebelum pengeditan OP.
Pascal Thivent
Saya akan. Objek java.util.Date tidak dapat dibandingkan dengan objek java.sql.Timestamp dengan hasil yang sepenuhnya dapat diprediksi.
Doug Moscrop
8

Mungkin karena tanggal java Anda memiliki format yang berbeda dari mysql format( YYYY-MM-DD HH:MM:SS)

melakukan hal ini

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 Date date = new Date();
 System.out.println(dateFormat.format(date));
Marcx
sumber
Anda menyebutkan format yang benar dalam referensi dan kemudian menggunakan format yang salah dalam kode.
Merric Huffstutler
6

Anda akan mendapatkan format waktu 2011-07-18 +

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

datetime mysql -> 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);
Nikopol
sumber
4
java.util.Date date = new Date();
Object param = new java.sql.Timestamp(date.getTime());    
preparedStatement.setObject(param);
michdraft.dll
sumber
1

Gunakan kode berikut untuk memasukkan tanggal ke dalam MySQL. Alih-alih mengubah format tanggal kami untuk memenuhi persyaratan MySql, kami dapat membantu basis data untuk mengenali tanggal kami dengan mengatur STR_TO_DATE(?, '%l:%i %p')parameter.

Misalnya, 2014-03-12 dapat direpresentasikan sebagai 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'),?,?,?,?,?)"); 
Yang_2333
sumber
1

Ini sangat sederhana meskipun kondisi dalam jawaban ini ada di mysql kolom datatype adalah datetime dan Anda ingin mengirim data dari kode java ke mysql:

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

Yang penting pilih saja tanggal dan formatnya sudah sesuai format mysql dan kirimkan, tidak perlu modifikasi lebih lanjut.

Yash Agrawal
sumber
0

Sebenarnya Anda tidak dapat menggunakan SimpleDateFormat, Anda dapat menggunakan sesuatu seperti ini;

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

Dengan cara ini Anda bisa langsung mendapatkan tanggal dengan format yang ditentukan.

Sahin Yanlık
sumber
0

Saya masih lebih suka metode dalam satu baris

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

itu berhasil untuk saya !!

di tabel mysql

DATETIME

dalam entitas:

private Date startDate;

dalam proses:

objectEntity.setStartDate(new Date());

dalam persiapan

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
Miguel Alonso Mosquera Aguilar
sumber