2016-04-08 8 views
1

Ich versuche, eine Methode in Java, die alle Datensätze zwischen zwei Daten löscht, aber es gibt mir einen Synax-Fehler. Dies ist der Code ‚?‘Java Mysql löschen Datensätze zwischen Daten Syntax Fehler

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

Wie Sie sehen können, Ich drucke die Lösch SQL-Anweisung, nachdem ich die ersetzen Parameter mit Werten. Hier ist ein Beispiel dafür, was er druckt auf der Konsole:

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

Ich betreiben, dass genau die gleiche Abfrage auf MySQL Workbench und Zeilen gelöscht werden, jedoch bekomme ich diese Syntaxfehler, wenn ich meinen Java-Code ausführen:

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 

Ich habe diese Syntax verwendet, um andere SQL-Anweisungen auszuführen und keine Fehler. Die einzige Sache in meinem Kopf ist, dass die "execute" -Methode im ps_delete.execute (sql_delete) Teil meines Codes nicht funktioniert, aber ich habe "executeUpdate" und "executeQuery" Methoden verwendet, die mir auch Fehler geben.

Ich verwende die Bibliothek mysql-connector-java-5.0.8-bin.jar, um die Verbindung zu meiner MySQL-Bibliothek herzustellen.

Irgendeine Idee warum dies geschieht und wie kann ich es lösen?

Dank

Antwort

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

Es scheint mir, dass es sein sollte:

ps_delete.execute(); 
+0

Stumm mich. Das hat es gelöst. Vielen Dank! –

0

Bezug auf eine andere Stelle auf Stackoverflow Sie es tun sollten, mit dem setDate Methode. [JDBC: Inserting Date values into MySQL

Der Code sollte so aussehen:

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

    } 

Ich versuche, den Code nicht, schreiben Sie einfach Sie eine Vorstellung davon zu geben, wie es funktioniert. lassen Sie mich wissen