首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个JDBC查询中的多个delete查询

问单个JDBC查询中的多个delete查询
EN

Stack Overflow用户
提问于 2012-09-07 03:49:33
回答 2查看 1.3K关注 0票数 2

我在生成delete命令时遇到了问题:

代码语言:javascript
复制
    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();
}

当在phpmyadmin中使用时,我得到的查询是有效的-但当我尝试将它与jdbc executeUpdate()一起使用时,我得到了MySQLSyntaxError,即对于带有两个导出的外键的表"trasy“,查询如下:

代码语言:javascript
复制
DELETE FROM kursy WHERE ID_TRASY=19;
DELETE FROM przystanki WHERE ID_TRASY=19;
DELETE FROM trasy WHERE ID_TRASY=19;

例外:

代码语言:javascript
复制
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

查询之间是否有\n并不重要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-07 03:51:45

在Statement上使用.addBatch()方法,分别添加每个DELETE查询,并将它们作为批处理进行.executeBatch()。

如果使用事务,您可以测试每个语句返回的计数,如果有任何错误,您可以.rollback()整个批处理。

我有一个开源项目,它确切地展示了如何做到这一点。

SQL Construction Kit on GitHub,有一个AbstractDatabase.java类,它有一个.executeBatch()方法,您可以复制并使用自己,只需很少的修改。它甚至包含用于测试每个命令和执行提交/回滚的代码。

票数 5
EN

Stack Overflow用户

发布于 2012-09-07 03:55:37

jdbc一次执行一条语句,所以您的语句,即使是由\n分隔的多条语句,实际上也是作为一条指令执行的,因此出现了mysql错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12307348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档