0

重複の可能性:
JavaTimeStampをmsaccess Dateに変換する方法は?

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

エラー:[Microsoft] [ODBC MicrosoftAccessDriver]基準式のデータ型が一致しません。

推奨される変更:

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)
4

2 に答える 2

1

Now()フィールドに挿入する値にその関数を使用するようにdbエンジンに依頼しますSaleTimestamp

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

Javaには、ファイルまたはコンソールにテキスト文字列を書き込むための何らかの方法が必要です。dbエンジンに実行を要求している完成したSQLステートメントを表示する機会を自分自身に与えるために、そのようなメソッドを見つけて使用することをお勧めします。別のJavaの質問で見たものに基づいて、提案します...

System.out.println(sql);

残念ながら、私はJavaを知りません。その提案が機能しない場合は、別の方法を見つけてください。

于 2012-11-10T17:35:53.983 に答える
0

文字列内のパラメータを連結する代わりに、この記事で説明されているようにプリペアドステートメントを使用する必要があります。あなたの場合、コードは次のようになります。

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();
于 2012-11-10T20:26:22.347 に答える