Java Mysql 删除日期之间的记录语法错误

Java Mysql delete records between dates syntax error

我正在尝试 运行 Java 中的一种方法,该方法删除两个日期之间的所有记录,但是,它给我一个 Synax 错误。这是代码:

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

如您所见,我在替换“?”后打印了 delete sql 语句。带值的参数。这是它在控制台上打印的示例:

Delete Query: com.mysql.jdbc.PreparedStatement@1686d1f: DELETE FROM my_schema.my_table WHERE DATE(day_date) BETWEEN DATE('2016-04-01') AND DATE('2016-04-08')

我 运行 MySQL Workbench 上的完全相同的查询和行被删除,但是当我 运行 我的 java 时我得到这个语法错误代码:

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

我对 运行 其他 sql 语句使用了相同的语法,没有出现任何错误。我脑子里唯一的事情是我代码的 ps_delete.execute(sql_delete) 部分中使用的 "execute" 方法不起作用,但我使用了 "executeUpdate" 和 "executeQuery" 也给我错误的方法。

我正在使用 mysql-connector-java-5.0.8-bin.jar 库创建到我的 MySQL 库的连接。

知道为什么会这样吗?我该如何解决?

谢谢

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

我觉得应该是:

 ps_delete.execute();

参考 Whosebug 上的另一个 post 您应该使用 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();

    } 

我没有尝试代码,只是为了让您了解它是如何工作的。 让我知道