时间戳插入sql给我错误

时间:2014-06-05 13:36:42

标签: java mysql jdbc timestamp

插入sql的时间戳给我错误:

SQLException:数据截断:日期时间值不正确:''对于列'日期'在第1行 SQLState:22001 VendorError: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;

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

请帮忙!!!!谢谢!

2 个答案:

答案 0 :(得分:0)

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

一个版本的setTimestamp的方法doc:

setTimestamp(int parameterIndex, Timestamp x, Calendar cal)

使用UTC的示例:

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

其中 1 是索引, t 是时间戳对象,日历获取时区。

答案 1 :(得分:0)

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

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