我想在msaccess数据库中插入一个java时间戳,但是我收到的错误如下所示。 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驱动程序]条件表达式中的数据类型不匹配。
推荐的变更:
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)
答案 0 :(得分:1)
要求数据库引擎使用其Now()
函数作为您在SaleTimestamp
字段中插入的值。
String sql = "INSERT INTO Sale (SaleDetails, SaleTotal, SaleTimestamp)"
+ " VALUES ('"+saleDetails+"','"+saleTotal+"',Now())";
Java应该有办法将文本字符串写入文件或控制台。建议您找到并使用这样的方法,以便让自己有机会查看您要求db引擎执行的已完成的SQL语句。基于我在另一个Java问题中看到的内容,我建议......
System.out.println(sql);
不幸的是我不懂Java。如果该建议不起作用,请找另一种方法。
答案 1 :(得分:0)
不应在字符串中连接参数,而应使用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();