Java Tarihini JPA ile Mysql datetime olarak saklama


104

Herhangi bir kuruluş bana Java Tarihini Mysql datetime ... olarak nasıl saklayabileceğimi söyleyebilir mi?

Bunu yapmaya çalıştığımda ... Mysql tarih depolarında sadece tarih saklanıyor ve saat 00:00:00 olarak kalıyor böyle ...

2009-09-22 00:00:00

Sadece randevu değil zamanı da istiyorum ...

2009-09-22 08:08:11

Spring ile JPA (Hibernate) kullanıyorum, mydomain sınıfları java.util.Date kullanıyor ancak el yazısıyla yazılan sorguları kullanarak tablolar oluşturdum ...

bu benim yaratma ifadem

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;

belki kodunuzun parçaları?
Bozho


1
Bugünlerde artık hiç kullanmamalısınız java.util.Date(2010'da muhtemelen daha iyi bir seçenek yoktu). Saklamanız gereken tarih-saatin kesin gereksinimlerine bağlı olarak java.time.Instantveya gibi modern sınıfları kullanmak java.time.LocalDateTimedaha iyidir.
Ole VV

Bu eski cevaplardan bazıları Google sıralamasında oldukça üst sıralarda çıkıyor. Java 8+ sürümünde, datetime biçiminde kaydetmek için @Temporal kullanmak yerine, datetime tasarruf etmek için LocalDateTime'ı kullanabiliriz
HopeKing

readyStatement.setTimestamp (1, new Timestamp (System.currentTimeMillis ()));
Rajat

Yanıtlar:


165

bağlantıya bakın:

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

Aşağıdaki kod sorunu çözdü:

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

Bu ' currentTime ', türü DateTime olan sütuna eklendi ve başarılı oldu.


4
ancak, currentTime bir String nesnesidir ve db'de datatype olarak datetime alıyoruz, bunun eklenmeyeceğini düşünüyorum.
reddy

yyyy-MM-dd HH:mm:ssçok önemli. Büyük harf kullanımına dikkat edin.
biniam

91

Alanınıza (veya alıcıya) aşağıdaki @Temporal(TemporalType.TIMESTAMP)gibi açıklama ekleyin :

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

Bu hile yapmalı.


2
Cevap gerçekten bu!
Perneel

2
bunun için doğru cevap bu.
Ryan

3
Bu çözümü seçerseniz, tarihinizin db'den alındığında bir zaman damgası olarak görüneceğini unutmayın. Güzel 'yyyy-MM-dd ....' biçimlendirmesine sahip olmayacak)
jon

37

Belki kullanıyor java.sql.Datemusun? Bu, bir Java sınıfı olarak milisaniye ayrıntı düzeyine sahip olsa da (bu java.util.Date, kötü tasarım kararının bir alt sınıfıdır ), JDBC sürücüsü tarafından zaman bileşeni olmayan bir tarih olarak yorumlanacaktır. Bunun java.sql.Timestampyerine kullanmalısın .


1
Alan sınıflarında java.sql.Dateveya kullanmazdım java.sql.Timestampama sanırım bu OP'nin düzenlenmesinden önce yazılmıştı.
Pascal Thivent 09

İsterim. java.util.Date nesneleri, tamamen öngörülebilir sonuçlarla java.sql.Timestamp nesnelerine benzemez.
Doug Moscrop

8

Muhtemelen java tarihinizin mysql format( YYYY-MM-DD HH:MM:SS)

Bunu yap

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

Referans kısmında doğru formattan bahsettiniz ve ardından kodda yanlış formatı kullandınız.
Merric Huffstutler

6

2011-07-18 + saat biçimini alacaksınız

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 tarihsaat

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

Tarihi MySQL'e eklemek için aşağıdaki kodu kullanın. MySql gereksinimlerini karşılamak için tarih formatımızı değiştirmek yerine, STR_TO_DATE(?, '%l:%i %p')parametreleri ayarlayarak veri tabanımızın tarihimizi tanımasına yardımcı olabiliriz .

Örneğin, 2014-03-12 şu şekilde temsil edilebilir: 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

Bu yanıttaki koşullar çok basit olsa da mysql'de sütun veri türü datetime'dır ve java kodundan mysql'e veri göndermek istiyorsunuz:

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

önemli olan sadece tarihi seçin ve formatı zaten mysql formatına uygun ve gönderin, başka değişiklik gerekmez.


0

Aslında SimpleDateFormat kullanmayabilirsiniz, bunun gibi bir şey kullanabilirsiniz;

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

Bu şekilde, belirtilen formattaki tarihi doğrudan alabilirsiniz.


0

Hala yöntemi tek satırda tercih ediyorum

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

-2

benim için çalışıyor !!

mysql tablosunda

DATETIME

varlıkta:

private Date startDate;

işlemde:

objectEntity.setStartDate(new Date());

readyStatement içinde:

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.