2016-04-08 67 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(); 

    } 

我不尝试的代码,只写给你它是如何工作的想法。 让我知道