我的其中一个课程中有以下电话
@Override
public Integer save(NewsItem item){
ConnectionPool pool = new ConnectionPool();
Connection connection = pool.getConnection();
PreparedStatement ps = null;
try{
String query = "INSERT INTO newsItem (type,title,content,link,layout,imageUri,timestamp)" +
"VALUES (?,?,?,?,?,?,?)";
ps = connection.prepareStatement(query);
ps.setInt(1,item.getType());
ps.setString(2,item.getTitle());
ps.setString(3,item.getContent());
ps.setString(4,item.getLink());
ps.setInt(5,item.getLayout());
ps.setString(6,item.getImageUri());
ps.setDate(7,item.getTimestamp());
return ps.executeUpdate();
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
ConnectionUtility utility = new ConnectionUtility();
utility.closePreparedStatement(ps);
pool.freeConnection(connection);
}
}
NewsItem POJO具有以下属性
private Integer id; private Integer type; private String title; private String content; private String link; private Integer layout; private String imageUri; private Date timestamp;
一切正常并且已经过测试,但时间戳调用除外
ps.setDate(7,item.getTimeStamp())
我可以通过调用
在 NewsItem 对象上设置日期item.setTimestamp(new Date());
但是我从IDE(Eclipse)收到错误,告诉我以下消息
NewsItemDAO类型中的方法setDate(int,Date)不适用于参数 的setDate(INT,日期)
在我一直在努力的这个应用程序的整个生命周期中,这对我来说是一个瘟疫,因为我不得不暂时将时间戳存储为字符串。
如果MySQL数据库中的列类型为 DATETIME ,那么我应该采用不同的方式保存该时间戳吗?或者电话有问题吗?
答案 0 :(得分:2)
setDate()
预计java.sql.Date
,而不是java.util.Date
。
ps.setDate(7, new java.sql.Date(item.getTimestamp().getTime()));
但java.sql.Date
仅包含日期时间的日期部分,而不包含时间部分。您想改用java.sql.Timestamp
。
ps.setTimestamp(7, new Timestamp(item.getTimestamp().getTime()));
答案 1 :(得分:1)
检查您的导入 - 我的猜测是您使用的是java.util.Date
而不是java.sql.Date
。
如果可能的话,最好使用扩展java.sql.Timestamp
的{{1}}来避免这种混淆并提高代码的可读性。