Java Mysql删除日期间记录语法错误
我试图在Java中运行一个方法,删除两个日期之间的所有记录,但是,它给了我一个Synax错误。代码如下:Java Mysql删除日期间记录语法错误,java,mysql,sql,syntax-error,sql-delete,Java,Mysql,Sql,Syntax Error,Sql Delete,我试图在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)
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();
参考StackOverflow上的另一篇文章,您应该使用setDate方法。 [ 您的代码应该如下所示:
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();
}
我不尝试代码,只是想让你了解它是如何工作的。
让我知道
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();
}