2016-04-08 30 views
1

İki tarih arasındaki tüm kayıtları silen Java'da bir yöntem çalıştırmaya çalışıyorum, ancak bana bir Synax hatası veriyor. Bu kodu verilmiştir: '?'Java Mysql tarihleri ​​arasında sözdizimi hatası silme hatası

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

ben yerine sonra, silme sql deyimi basıyorum görebileceğiniz gibi değerleri olan parametreler. İşte konsolda yazdırır ne bir örnek:

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

Ben MySQL Workbench ve satırlarda aynı sorgu silinmiş olsun o koşmak benim java kodu çalıştırdığınızda, ancak ben bu sözdizimi hatası alıyorum

Diğer sql deyimlerini çalıştırmak için aynı sözdizimini kullandım ve hata almadım. Başlığımdaki tek şey, kodumun ps_delete.execute (sql_delete) kısmında kullanılan "execute" yönteminin işe yaramamasıdır, ancak bana hataları da veren "executeUpdate" ve "executeQuery" yöntemlerini kullanmıştım.

MySQL kitaplığım ile bağlantı oluşturmak için mysql-connector-java-5.0.8-bin.jar kütüphanesini kullanıyorum.

Bunun neden olduğuyla ilgili bir fikriniz var ve bunu nasıl çözebilirim? Olması gerektiği Bana öyle geliyor

Teşekkür

cevap

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

:

ps_delete.execute(); 
+0

Dumb me. Bu çözüldü. Teşekkürler! –

0

Sen setDate yöntemiyle bunu yapmalıyım StackOverflow başka yazı atıfta. [JDBC: Inserting Date values into MySQL

Kodunuzu şöyle olmalıdır:

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

    } 

Sadece You nasıl çalıştığını hakkında bir fikir vermek için yazıyorum, kod çalışmayın. bana bildirin