JPA를 사용하여 Java 날짜를 Mysql datetime에 저장하는 방법


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 2010 년


1
요즘에는 더 이상 사용하지 않아야 java.util.Date합니다 (2010 년에는 더 나은 선택이 없었을 것입니다). 더 나은처럼, 현대 클래스를 사용 java.time.Instant하거나 java.time.LocalDateTime당신이 보관해야하는 날짜 - 시간의 정확한 요구 사항에 따라.
Ole VV

이러한 오래된 답변 중 일부는 Google 순위에서 꽤 높은 순위를 차지합니다. Java 8+에서는 @Temporal을 사용하여 날짜 시간 형식으로 저장하는 대신 LocalDateTime을 사용하여 날짜 시간을 저장할 수 있습니다.
HopeKing

readyStatement.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

yyyy-MM-dd HH:mm:ss매우 중요합니다. 대소 문자를 기록해 둡니다.
biniam 2015

91

다음과 같이 필드 (또는 게터)에 주석을 추가합니다 @Temporal(TemporalType.TIMESTAMP).

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

그게 트릭을해야합니다.


2
이것은 참으로 대답입니다!
Perneel 2013

2
이것에 대해서는 이것이 정답입니다.
Ryan

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

아마도 자바 날짜가 mysql format( YYYY-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 = 새 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

나는 여전히 한 줄의 방법을 선호합니다.

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

-2

그것은 나를 위해 작동합니다!

mysql 테이블에서

DATETIME

엔티티에서 :

private Date startDate;

과정에서:

objectEntity.setStartDate(new Date());

readyStatement에서 :

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.