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();
}
我没有尝试代码,只是为了让您了解它是如何工作的。
让我知道
我正在尝试 运行 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();
}
我没有尝试代码,只是为了让您了解它是如何工作的。 让我知道