【问题标题】:timestamp insert to sql is giving me error插入到 sql 的时间戳给了我错误
【发布时间】:2014-07-26 12:54:06
【问题描述】:

时间戳插入 sql 给我错误:

SQLException:数据截断:不正确的日期时间值:第 1 行的“日期”列“” SQL状态:22001 供应商错误:0

~~~~~~~~~~~~~~~~~~这就是java中的样子:~~~~~~~~~~~~~~~~~~

String sql = "INSERT into complaint (ComplaintID,Date) VALUES" + "(?,?)";   
GetCurrentTimeStamp stamp = new GetCurrentTimeStamp();  
PreparedStatement rss = con.prepareStatement(sql);
rss.setInt(1,newComplaint.getComplaintID());
rss.setTimestamp(2,stamp.getTimeStamp());
newComplaint.setMsgResponse(MessageManager.msgResponse.SUCCESS);
rss.executeUpdate();

~~~~~~~~~~~~~~~~~~这是GetCurrentTimeStamp类:~~~~~~~~~~~~~~~~~~

import java.sql.Timestamp;
import java.util.Date;



public class GetCurrentTimeStamp 
{
    private  java.util.Date date= new java.util.Date();

    public Timestamp getTimeStamp(){
    return new java.sql.Timestamp(date.getTime());
    }
}

~~~~~~~~~~~~~~~~~~这是Mysql代码:~~~~~~~~~~~~~~~~~~

CREATE TABLE `complaint`
 (
  `ComplaintID` int(11) NOT NULL AUTO_INCREMENT,

  `Date` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`ComplaintID`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请帮忙!!!!谢谢!!

【问题讨论】:

    标签: java mysql jdbc timestamp


    【解决方案1】:

    您的 SQLState 说它是一个太长的字符串。 将 date/time/timestamp 值分配给主机变量时会发生这种情况 不够大。

    setTimestamp 一个版本的方法文档:

    setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
    

    使用 UTC 的示例:

    stmt.setTimestamp(1, t, Calendar.getInstance(TimeZone.getTimeZone("UTC")))
    

    1 是索引,t 是时间戳对象,Calendar 获取时区。

    【讨论】:

    • 看起来你尝试这样做是对的:CREATE TABLE complaint (ComplaintID int(11) NOT NULL AUTO_INCREMENT, Date timestamp (45) NULL DEFAULT NULL, PRIMARY KEY (@ 987654327@) ) 引擎=InnoDB AUTO_INCREMENT=41 默认字符集=utf8;我收到错误:错误代码:1426。为“日期”列指定的精度 45 太大。最大值是 6。但我可以在 Mysql 中插入: INSERT INTO complaint VALUES (10,'1980-02-10 22:00:01') 没有任何问题,我已经在 java 中使用了这个时间戳,所以我很困惑......
    • @user3574121 为你编辑了一些信息;)
    【解决方案2】:

    我已经解决了我的问题,这些是我所做的更改:

    String sql = "INSERT into complaint (ComplaintID,Date) VALUES" + "(?,?)";   
    PreparedStatement rss = con.prepareStatement(sql);
        rss.setInt(1,newComplaint.getComplaintID());
        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
        java.util.Date date= new java.util.Date();
        Date now = new Date();
        String strDate = sdfDate.format(now);
        Timestamp complainDate= Timestamp.valueOf(strDate);
        rss.setTimestamp(2, complainDate);
        rss.executeUpdate();
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2017-09-04
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多