Как хранить дату Java в Mysql datetime...?

Может ли кто-нибудь сказать мне, как я могу хранить Java Date в Mysql datetime...?

Когда я пытаюсь это сделать... сохраняется только дата и время 00:00:00 в Mysql хранятся такие даты...

2009-09-22 00:00:00

Я хочу не только дату, но и время... например

2009-09-22 08:08:11

Я использую JPA (Hibernate) с spring для классов mydomain использует 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;

Ответ 1

см. в ссылке:

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, и он был успешным.

Ответ 2

Аннотировать ваше поле (или getter) с помощью @Temporal(TemporalType.TIMESTAMP), например:

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

Это должно сделать трюк.

Ответ 3

Возможно, вы используете java.sql.Date? Хотя это имеет миллисекундную гранулярность как класс Java (это подкласс java.util.Date, плохое дизайнерское решение), он будет интерпретироваться драйвером JDBC как дата без компонента времени. Вместо этого вы должны использовать java.sql.Timestamp.

Ответ 4

Вероятно, потому что ваша дата java отличается от 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));

Ответ 5

вы получите 2011-07-18 + формат времени

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

Ответ 6

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

Ответ 7

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

Ответ 8

Используйте следующий код, чтобы вставить дату в 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'),?,?,?,?,?)"); 

Ответ 9

На самом деле вы не можете использовать SimpleDateFormat, вы можете использовать что-то вроде этого:

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

Таким образом вы можете напрямую получить дату с указанным форматом.

Ответ 10

Его очень простые условия в этом ответе в mysql: тип данных столбца datetime, и вы хотите отправить данные из java-кода в mysql:

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

важная вещь - просто выбрать дату и ее формат уже в формате mysql и отправить его, никаких дополнительных изменений не требуется.

Ответ 11

Я все еще предпочитаю метод в одну строку

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

Ответ 12

он работает для меня!

в таблице mysql

DATETIME

в объекте:

private Date startDate;

в процессе:

objectEntity.setStartDate(new Date());

в подготовленном заявлении:

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));