2016-04-08 66 views
1

我想在Java中運行一個方法,刪除兩個日期之間的所有記錄,但是,它給了我一個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-connector-java-5.0.8-bin.jar庫創建到我的MySQL庫的連接。

任何想法爲什麼會發生這種情況,我該如何解決它?

感謝

回答

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

在我看來,它應該是:

ps_delete.execute(); 
+0

愚蠢的我。這解決了它。謝謝! –

0

參照另一篇文章在計算器上你應該用的setDate方法做到這一點。 [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(); 

    } 

我不嘗試的代碼,只寫給你它是如何工作的想法。 讓我知道