5

我需要将当前日期和时间(毫秒)插入 MySQL。我做了以下事情:

long time = System.currentTimeMillis();
java.sql.Timestamp timestamp = new java.sql.Timestamp(time);
System.out.println("Time in milliseconds :" + timestamp);

我正确地得到了以毫秒为单位的时间(例如 2013-03-21 00:08:33.523)。但是,我需要将此信息插入 MySQL 数据库。我尝试了以下使用PreparedStatement

prepStmt.setTimestamp(2,timestamp);

但是插入的时间没有毫秒(例如 2013-03-21 00:08:33)。

如何插入以毫秒为单位的时间。

编辑:数据库中的列是DATETIME类型。

4

4 回答 4

9
java.util.Date date = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
preparedStatement.setTimestamp(1, timestamp);
于 2013-03-20T21:12:31.477 回答
2

如果列是 DATETIME 类型,请使用 PreparedStatement 的 setDate 方法。

java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
stmnt.setDate(1, date);
于 2013-03-20T21:15:54.140 回答
1

您可以创建一个方法 getCurrentTimeStamp() 并从 JDBC 语句中调用它

PreparedStatement.setTimestamp(4,getCurrentTimeStamp());

方法:

私有静态 java.sql.Timestamp getCurrentTimeStamp() {

java.util.Date today = new java.util.Date();
return new java.sql.Timestamp(today.getTime());

}

于 2014-05-24T16:53:35.150 回答
0

由于其他成员已正确回答了该问题,让我添加一些关于数据库中日期类型存储的个人后见之明。

在个人层面上,我更喜欢以长格式存储日期信息。我发现以后存储和使用都更容易。不仅大多数语言都提供了创建带有长参数的新日期,而且您不会被预设格式卡住,您将有机会以不同的方式对其进行格式化。例如,我必须在我开发的某个网站上将日期格式化为英语或法语格式,然后在某些语言参数上使用 if-else if 并根据语言偏好应用给定格式会更容易。

但是,这种方法有一些缺点。您需要将其格式化回可读格式,例如,由不使用 Java 格式化的查询完成的自动报告。

-----------------------------ADD CODE-----------------------------

    // Stored as 0 if the date is not initialised
    long time = objInscription.getDatePremierVisionnement() != null ?
        objInscription.getDatePremierVisionnement().getTime() : 0;

-------------------------------GET CODE----------------------------
    // long is store as 0 if the date has not been initialised           
    long long = rs.rsReadColumnLong(1);
    if (long  == 0) {
        someobj.setSomeDate(null);
    } else {
        someobj.setSomeDate(new Date(long));
    }

您将能够轻松地使用 SimpleFormat 来显示您的数据。

于 2013-03-20T21:29:02.077 回答