如何使用 JPA 将 Java 日期存储到 Mysql 日期时间
Posted
技术标签:
【中文标题】如何使用 JPA 将 Java 日期存储到 Mysql 日期时间【英文标题】:How to store Java Date to Mysql datetime with JPA 【发布时间】:2011-01-24 22:47:58 【问题描述】:谁能告诉我如何将 Java 日期存储到 mysql 日期时间...?
当我尝试这样做时...仅存储日期,时间保持为 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)
);
【问题讨论】:
你的代码片段,也许? 链接:coderanch.com/t/304851/JDBC/java/… 这些天你根本不应该再使用java.util.Date
(在2010年可能没有更好的选择)。最好使用现代类,例如 java.time.Instant
或 java.time.LocalDateTime
,具体取决于您需要存储的日期时间的确切要求。
其中一些旧答案在 Google 排名中排名很高。在 Java 8+ 中,我们可以简单地使用 LocalDateTime 来保存日期时间,而不是使用 @Temporal 来保存日期时间格式
preparedStatement.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
【参考方案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 的列中,并且插入成功。
【讨论】:
但是,currentTime 是一个 String 对象,在 db 中我们将 datetime 作为数据类型,我认为它不会被插入。对吧?yyyy-MM-dd HH:mm:ss
非常重要。注意大小写。【参考方案2】:
使用 @Temporal(TemporalType.TIMESTAMP)
注释您的字段(或 getter),如下所示:
public class MyEntity
...
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date myDate;
...
这应该可以解决问题。
【讨论】:
这就是答案! 为此,这是正确的答案。 请注意,如果您选择此解决方案,您的日期将在从 db 获取时显示为时间戳。它不会有很好的格式'yyyy-MM-dd ....')【参考方案3】:您可能在使用java.sql.Date
吗?虽然它作为 Java 类具有毫秒粒度(它是 java.util.Date
的子类,错误的设计决策),但 JDBC 驱动程序会将其解释为没有时间组件的日期。您必须改用java.sql.Timestamp
。
【讨论】:
我不会在域类中使用java.sql.Date
或java.sql.Timestamp
,但我想这是在编辑OP 之前编写的。
我愿意。 java.util.Date 对象与 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 日期时间 -> 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 日期时间
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。我们可以通过设置STR_TO_DATE(?, '%l:%i %p')
参数来帮助数据库识别我们的日期,而不是改变我们的日期格式以满足MySql的要求。
例如,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】:虽然此答案中的条件在 mysql 中非常简单,但 列数据类型为 datetime 并且您希望将数据从 java 代码发送到 mysql:
java.util.Date dt = new java.util.Date();whatever your code object may be
.setDateTime(dt);
重要的是选择日期,它的格式已经按照mysql格式发送,不需要进一步修改。
【讨论】:
【参考方案10】:其实你可能不会用SimpleDateFormat,你可以用这样的东西;
@JsonSerialize(using=JsonDateSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
private Date blkDate;
这样可以直接获取指定格式的日期。
【讨论】:
【参考方案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());
在preparedStatement中:
pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));
【讨论】:
以上是关于如何使用 JPA 将 Java 日期存储到 Mysql 日期时间的主要内容,如果未能解决你的问题,请参考以下文章