【问题标题】:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: ' 'com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期时间值:''
【发布时间】:2015-11-12 13:36:50
【问题描述】:

我花了最后一个小时尝试使用 java 通过时间戳将日期和时间插入到 sql 数据库中的替代版本。

Date endDate = new Date();    
ptmt.setTimestamp(5, new java.sql.Timestamp(endDate.getTime()));

我的创建表语句是

CREATE TABLE Location (
  UserID varchar(50),
  Latitude DOUBLE,
  Longitude DOUBLE,
  Altitude DOUBLE,
  TimeInserted timestamp
);

是否有其他输入日期的方法。

在我准备好的语句中,我尝试在字符串中包含 now(),但它会查找参数。

String queryString = "INSERT INTO Location(UserID,Latitude,Longitude,Altitude,TimeInserted) VALUES(?,?,?,?,now());";

但是在搜索第5个参数的时候就不开心了。

有什么想法吗?

我尝试制作表格日期并设法简单地插入日期 - 但是我需要时间来订购。

谢谢

【问题讨论】:

  • 为什么使用timestamp?使用datetime
  • 我刚刚使用所有五 (5) 个参数尝试了您的代码,它对我来说效果很好。您的代码中一定还有其他未向我们展示的内容。

标签: java mysql jdbc


【解决方案1】:

但是在搜索第5个参数的时候就不开心了。

String queryString = "INSERT INTO Location(UserID,Latitude,Longitude,Altitude,TimeInserted) VALUES(?,?,?,?,now());";

您的查询字符串有 4 个绑定参数,但此语句 ptmt.setTimestamp(5, new java.sql.Timestamp(endDate.getTime())); 试图将 long 绑定到不存在的第 5 个参数

【讨论】:

  • 我的查询字符串实际上是 String queryString = "INSERT INTO LocationTrace(UserID,Latitude,Longitude,Altitude,TimeInserted) VALUES(?,?,?,?,?);"; 我只是展示了我如何尝试在字符串中使用 now(),就像在 sql 中一样。
【解决方案2】:

要记住的事情

public Timestamp(int year, int month, int date, int hour, int minute, int second, int nano)

已弃用。而是使用构造函数 Timestamp(long millis)

Date endDate= new Date();
java.sql.Timestamp eDate = new java.sql.Timestamp(enddate.getTime());
long endDatetime= eDate.getTime();

ptmt.setTimestamp(5, endDatetime);

试试这个。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 2019-12-26
    • 1970-01-01
    • 2018-10-25
    • 2013-12-04
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多