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;

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.


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.


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.


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

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

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

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

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'),?,?,?,?,?)"); 

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.


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.


0

Saya masih lebih suka metode dalam satu baris

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

-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()));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.