如何将 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?