2012-11-10 111 views
0

Possible Duplicate:
How to convert Java TimeStamp into ms access Date?如何將Timestamp(date.getTime())轉換爲ms訪問日期?

我想將Java時間戳到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()); 

錯誤: [微軟] [ODBC Microsoft Access中驅動程序]標準表達式中的數據類型不匹配。

變化Recommemded:

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) 
+1

是的,只有兩個小時前,「有一個公認的答案「,原始線程@Adesh有什麼問題? –

+1

等等,還有一個小時就是這個強迫症,還是在發佈三次後有一個神祕的祕密迴應? –

+0

其實每個問題都略有不同......但你是對的。我不應該很快接受答案。 – Adesh

回答

1

問數據庫引擎使用其Now()功能爲你插入到你的SaleTimestamp字段的值。

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

Java應該有一些方法來將文本字符串寫入文件或控制檯。建議您查找並使用這種方法,以便讓您有機會查看您要求數據庫引擎執行的完整SQL語句。根據我在另一個Java問題中看到的內容,我會建議...

System.out.println(sql); 

不幸的是,我不知道Java。如果這個建議不起作用,找到另一種方法來做到這一點。

+0

您好HansUp - 這給出了一個語法錯誤,如下所示 - 查詢表達式中的字符串''Now())' – Adesh

+0

並且該錯誤來自Access數據庫引擎通過ODBC?我不明白爲什麼db引擎會抱怨'Now()'。你能顯示完成的'sql'字符串給你'myStatement.executeUpdate()',並直接在Access中進行測試和/或向我們顯示文本? – HansUp

+0

不,Netbeans出現錯誤。我已經添加了上面的文字。 – Adesh

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(); 
相關問題