如何将 Timestamp(date.getTime()) 转换为 ms 访问日期? [复制]

Posted

技术标签:

【中文标题】如何将 Timestamp(date.getTime()) 转换为 ms 访问日期? [复制]【英文标题】:How to convert Timestamp(date.getTime()) into ms access Date? [duplicate] 【发布时间】:2012-11-10 17:14:11 【问题描述】:

可能重复:How to convert Java TimeStamp into ms access Date?

我想将 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)

【问题讨论】:

是的,就在两个小时前,“有一个公认的答案”,原始线程@Adesh 有什么问题? 等一下,再早一个小时,这是强迫症还是发了三遍后有什么神奇的秘密?? 其实每个问题都略有不同......但你是对的。我不应该这么快就接受答案。 【参考方案1】:

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

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

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

System.out.println(sql);

很遗憾,我不懂 Java。如果该建议不起作用,请找到另一种方法。

【讨论】:

Hi HansUp - 这给出了一个语法错误,如下所示 - 查询表达式''Now())'中的字符串 那个错误来自通过 ODBC 的 Access db 引擎?我不明白为什么数据库引擎会抱怨Now()。您能否显示您提供给myStatement.executeUpdate() 的已完成的sql 字符串并直接在Access 中对其进行测试和/或向我们展示文本? 不,Netbeans 中出现错误。我已经添加了上面的文字。 我不懂 Java,所以如果看不到您要求 Access 的数据库引擎执行的 SQL 语句的全文,我可能无法提供帮助。但是,根据您添加到问题中的错误消息,该语句是否可能在 Now() 函数之前包含一个杂散的单引号? ...Syntax error in string in query expression ''Now())'【参考方案2】:

您应该使用 this article. 中解释的准备好的语句,而不是连接字符串中的参数。在您的情况下,代码应如下所示:

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();

【讨论】:

以上是关于如何将 Timestamp(date.getTime()) 转换为 ms 访问日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在新日期vue.js中获取2个不同日期之间的所有日期[重复]

如何将扳手 TIMESTAMP 转换为 BigQuery TIMESTAMP?

如何将timestamp转换成string

kettle如何将string类型转换为timestamp类型

js compress 图片

如何将 Joda-Time 与 java.sql.Timestamp 一起使用