0

可能重复:
如何将 Java TimeStamp 转换为 ms 访问日期?

我想将 java Timestamp 插入 msaccess 数据库,但我收到下面列出的错误。ms-access 字段已设置为 DATE 数据类型。任何建议将不胜感激。谢谢

这是我的 DAO 类方法:

public void addSale(String saleDetails, String saleTotal, Timestamp saleTimestamp) 
                    throws ClassNotFoundException, SQLException {

Statement myStatement = getConnection();
String sql = "INSERT INTO Sale (SaleDetails, SaleTotal, SaleTimestamp)"
            + " VALUES ('"+saleDetails+"','"+saleTotal+"','"+saleTimestamp+"')";

myStatement.executeUpdate(sql);
closeConnection();

我的 DTO 方法:

public void storeSale(String saleDetails, String saleTotal, Timestamp saleTimestamp){
   DAO dao = DAO.getDAO();
   try {
      dao.addSale(saleDetails, saleTotal, saleTimestamp);
    } catch (ClassNotFoundException | SQLException ex) {
        Logger.getLogger(Sale.class.getName()).log(Level.SEVERE, null, ex);
    }

我的时间戳方法:

public Timestamp addTimestamp(){ 
    java.util.Date today = new java.util.Date();
    long time = today.getTime();
    java.sql.Date date = new java.sql.Date(time);
    return new Timestamp(date.getTime());

错误:[Microsoft][ODBC Microsoft Access Driver] 标准表达式中的数据类型不匹配。

建议的更改:

public void addSale(String saleDetails, String saleTotal) 
                        throws ClassNotFoundException, SQLException {

     Statement myStatement = getConnection();
     String sql = "INSERT INTO Sale (SaleDetails, SaleTotal, SaleTimestamp)"
                + " VALUES ('"+saleDetails+"','"+saleTotal+"',Now())";

     myStatement.executeUpdate(sql);
     closeConnection();

新错误:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression ''Now())'.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956)
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113)
    at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3109)
    at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337)
    at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:287)
4

2 回答 2

1

要求数据库引擎将其Now()函数用于您插入到SaleTimestamp字段中的值。

String sql = "INSERT INTO Sale (SaleDetails, SaleTotal, SaleTimestamp)"
            + " VALUES ('"+saleDetails+"','"+saleTotal+"',Now())";

Java 应该有一些方法可以将文本字符串写入文件或控制台。建议您找到并使用这样的方法,以便让自己有机会查看您要求数据库引擎执行的完整 SQL 语句。根据我在另一个 Java 问题中看到的内容,我建议...

System.out.println(sql);

不幸的是我不懂Java。如果该建议不起作用,请找到另一种方法。

于 2012-11-10T17:35:53.983 回答
0

您应该使用本文所述的准备好的语句,而不是连接字符串中的参数在您的情况下,代码应如下所示:

PreparedStatement stmt = connection.prepareStatetement("INSERT INTO Sale (SaleDetails, SaleTotal, SaleTimestamp) VALUES (?, ?, ?)");
stmt.setObject(1, saleDetails);
stmt.setObject(2, saleTotal);
stmt.setObject(3, saleTimestamp);
stmt.executeUpdate();
于 2012-11-10T20:26:22.347 回答