无法识别Java MySQL数据库调用中的日期类型

时间:2010-09-24 15:28:03

标签: java mysql jdbc

我的其中一个课程中有以下电话

@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 ,那么我应该采用不同的方式保存该时间戳吗?或者电话有问题吗?

2 个答案:

答案 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}}来避免这种混淆并提高代码的可读性。