我在课堂上遇到生成删除命令的问题:
private String generateDeleteCommand() {
StringBuilder deleteCommand = new StringBuilder();
for (ForeignKey fk : exportedForeignKeys) {
deleteCommand.append("DELETE FROM ").append(fk.foreignTableName)
.append(" WHERE ").append(fk.foreignColumnName)
.append("=:").append(fk.primaryColumnName).append(";\n");
}
deleteCommand.append("DELETE FROM ").append(tableName)
.append(" WHERE ");
for (String key : primaryKeys.keySet()) {
deleteCommand.append(key).append("=:").append(key).append(" AND ");
}
deleteCommand
.delete(deleteCommand.length() - 5, deleteCommand.length());
deleteCommand.append(";");
System.out.println(deleteCommand);
return deleteCommand.toString();
}
Run Code Online (Sandbox Code Playgroud)
我在phpmyadmin中使用时获得的查询是有效的 - 但是当我尝试将其与jdbc executeUpdate()一起使用时,我得到MySQLSyntaxError,即对于带有两个导出外键查询的表"trasy",如下所示:
DELETE FROM kursy WHERE ID_TRASY=19;
DELETE FROM przystanki WHERE ID_TRASY=19;
DELETE FROM trasy WHERE ID_TRASY=19;
Run Code Online (Sandbox Code Playgroud)
例外:
com.mysql.jdbc.exceptions.jdbc4.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 'DELETE FROM przystanki WHERE ID_TRASY=19;
DELETE FROM trasy WHERE ID_TRASY=19' at line 2
Run Code Online (Sandbox Code Playgroud)
查询之间是否有\n无关紧要.
小智 5
使用该.addBatch()方法Statement并分别添加每个DELETE查询并将.executeBatch()它们作为批处理添加.
如果使用事务,您可以测试每个语句返回的计数,如果有任何错误,您可以.rollback()使用整个批处理.
我有一个开源项目,准确显示如何执行此操作.
在GitHub上的SQL Construction Kit中,有一个AbstractDatabase.java类,它有一个.executeBatch()方法可以自己复制和使用,只需要很少的修改.它甚至还有用于测试每个命令和执行提交/回滚的代码.
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |