列的#SQL数据类型" LOGINDATE"是日期。为什么我会收到此错误?
private void compareDate(){
sql = "Select curdate()";
Date currentDate = lastLogin;
try{
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
currentDate = rs.getDate(1);
}
}catch(SQLException e){
System.out.println(e);
}
if(currentDate.compareTo(lastLogin) == 1){
System.out.println(currentDate);
System.out.println(lastLogin);
sql = "UPDATE CUSTOMERS SET LOGINDATE="+currentDate+", NFLIXCREDIT=3 WHERE USERNAME='"+username+"'";
try{
ps = con.prepareStatement(sql);
ps.executeUpdate();
}catch(SQLException e){
System.out.println(e);
}
}
}
二零一五年五月三十零日
2015年5月29日
错误 -
com.mysql.jdbc.MysqlDataTruncation:数据截断:日期不正确 价值:' 1980'对于专栏' LOGINDATE'在第1行
答案 0 :(得分:1)
您使用的是未准备好的声明。
更改为
sql = "UPDATE CUSTOMERS SET LOGINDATE=?, NFLIXCREDIT=3 WHERE USERNAME=?";
try{
ps = con.prepareStatement(sql);
ps.setDate(1,currentDate);
ps.setString(2,username);
ps.executeUpdate();
}catch(SQLException e){
在您的情况下,将调用toString()
日期方法,然后您的日期为长
答案 1 :(得分:0)
使用准备好的声明是最佳选择。
另一种选择是用'':
包装日期UPDATE CUSTOMERS SET LOGINDATE='2015-05-30', NFLIXCREDIT=3...