从util.Date转换为sql.Date不起作用

时间:2014-08-06 00:32:39

标签: java sql ms-access java.util.date

为什么以下查询会返回此错误消息:'数据异常:无效的日期时间格式'?我研究了这个并且似乎没有任何问题吗?

java.util.Date today = new java.util.Date(); 
releaseDate = new java.sql.Date(today.getTime());
qtd.updateTakenOutTable("insert into takenOutTbl (MovieID, CellPhoneNum, DateTakenOut) VALUES ( ?,      ?, ?)", movieID, num, releaseDate); 

以下是方法:

public void updateTakenOutTable(String update, String movieID, String num, java.sql.Date releaseDate) throws SQLException {
    try {
        Connection connection = dc.DatabaseConnection();
        PreparedStatement statement = connection.prepareStatement(update);
        statement.setString(1, movieID);
        statement.setDate(2,releaseDate);
        statement.setString(3, num);
        statement.executeUpdate();
        statement.close();

    } catch (SQLException ex) {
        System.err.println(ex.getMessage());
    }
}

2 个答案:

答案 0 :(得分:1)

似乎您尝试将releaseDate分配到 CellPhoneNum ,将num分配给 DateTakenOut

尝试

statement.setString(2, num);    
statement.setDate(3,releaseDate);

答案 1 :(得分:0)

您正在混合日期和时间信息的格式,因此格式无效......一个是“长”,一个不是。如果有的话,看不到声明的类型。

今天是一个util.Date 见http://docs.oracle.com/javase/7/docs/api/java/util/Date.html

  

long getTime()返回自此Date对象表示的自1970年1月1日00:00:00 GMT>以来的毫秒数。

releaseDate 是一个sql.Date http://docs.oracle.com/javase/7/docs/api/java/sql/class-use/Date.html#java.sql

仔细阅读本文档,您将看到该类型从未表示为“long”。

如果你想要一个面向sql的时间,也许你宁愿使用... sql.time?这在docs.oracle上有自己的页面。

sql.date和sql.time用于与SQL数据库通信,而实用程序。日期不是。跨不同的数据库系统不容易处理时间。你引用的long类型就像计时器一样计算毫秒......这个计时器始于1970年,因为世纪之交的Y2K问题。它允许在这种规模上进行比较。请注意有关在不同时间长度内有多少毫秒的文档...