2016-04-08 9 views
1

Javaで2つの日付間のすべてのレコードを削除するメソッドを実行しようとしていますが、Synaxエラーが発生します。これはコードです:「?」Java Mysqlで日付間のレコードを削除する構文エラー

public void updateIntegraton(String dateInit, String dateEnd) 
{ 
    Connection conn = ConnectionManager.getConnection(); 
    String sql_delete = "DELETE FROM my_schema.my_table WHERE DATE(day_date) BETWEEN DATE(?) AND DATE(?)"; 
    String sql_safe_updates = "SET SQL_SAFE_UPDATES = 0"; 
    PreparedStatement ps_delete; 
    PreparedStatement ps_safe_updates; 

    try { 
     ps_safe_updates = conn.prepareStatement(sql_safe_updates); 
     System.out.println("Setting safe updates off."); 
     ps_safe_updates.execute(); 
     ps_delete = conn.prepareStatement(sql_delete); 
     ps_delete.setString(1, dateInit); 
     ps_delete.setString(2, dateEnd); 
     System.out.println("Delete Query: " + ps_delete); 
     System.out.println("Deleting all records between dates " + dateInit +" and "+ dateEnd); 
     ps_delete.execute(sql_delete); 
     System.out.println("Deleted records. ");    
    } catch (SQLException e) { 
     System.out.println("Something went wrong on Delete"); 
     e.printStackTrace(); 
    } 
} 

あなたは私が交換した後、私は削除するSQL文を印刷しています見ることができるようにパラメータには値があります。ここでは、コンソールに印刷するものの例は次のとおりです。

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?) AND DATE(?)' at line 1 

Delete Query: [email protected]: DELETE FROM my_schema.my_table WHERE DATE(day_date) BETWEEN DATE('2016-04-01') AND DATE('2016-04-08') 

私は、MySQL Workbenchと行にまったく同じクエリが削除されますことを実行して、私は私のJavaコードを実行すると、しかし、私はこの構文エラーを取得します

この同じ構文を使用して他のSQL文を実行しましたが、エラーは発生しませんでした。私の頭の中で唯一のことは、コードのps_delete.execute(sql_delete)部分で使われている "execute"メソッドがうまくいかないことですが、エラーを返す "executeUpdate"と "executeQuery"メソッドも使用しています。

私はMySQLライブラリへの接続を作成するためにmysql-connector-java-5.0.8-bin.jarライブラリを使用しています。

なぜこれが起こっているのか、どのように解決できますか?

おかげ

答えて

3
ps_delete.execute(sql_delete); // you execute the not prepared request 

あるべきように私には思える:

ps_delete.execute(); 
+0

ダム私。これで解決しました。ありがとう! –

0

あなたはSETDATE方法でそれを行う必要があるのStackOverflow上の別のポストを参照。 [JDBC: Inserting Date values into MySQL

あなたのコードは次のようにする必要があります:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    try { 
     ps_safe_updates = conn.prepareStatement(sql_safe_updates); 
     System.out.println("Setting safe updates off."); 
     ps_safe_updates.execute(); 
     ps_delete = conn.prepareStatement(sql_delete); 
     ps_delete.**setDate**(1, sdf.parse(dateInit)); 
     ps_delete.**setDate**(2, sdf.parse(dateEnd)); 

     ps_delete.execute(); 

    } 

私はあなたにそれがどのように動作するかのアイデアを与えるために書き、コードをしようとしないでください。 私に教えてください

関連する問題