How to convert Timestamp(date.getTime()) into ms access Date? [duplicate]

百般思念 提交于 2020-01-06 06:35:30

问题


Possible Duplicate:
How to convert Java TimeStamp into ms access Date?

I would like to insert a java Timestamp into an msaccess database but I am getting an error which is listed below. The ms-access field has been set to a DATE datatype. Any advise would be deeply appreciated. Thanks

Here's my DAO class method:

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

My DTO method:

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

My Timestamp method:

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

Error: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

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

New error:

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:


Ask the db engine to use its Now() function for the value you insert into your SaleTimestamp field.

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

Java should have some way to write a text string to a file or console. Suggest you find and use such a method in order to give yourself the opportunity to view the completed SQL statement you're asking the db engine to execute. Based on what I saw in another Java question, I'll suggest ...

System.out.println(sql);

Unfortunately I don't know Java. If that suggestion does not work, find another way to do it.




回答2:


Instead of concatenating parameters in a string, you should use prepared statements as explained in this article. In your case the code should look like this:

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


来源:https://stackoverflow.com/questions/13324175/how-to-convert-timestampdate-gettime-into-ms-access-date

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!