首页
学习
活动
专区
圈层
工具
发布

JDBC插入
EN

Stack Overflow用户
提问于 2015-12-06 09:17:02
回答 3查看 311关注 0票数 1

对于insert语句,我使用JDBC addBatch和batchExecute。我要启动自动提交模式。我的问题是,例如,当我有20个插入,而插入号10引发异常(例如,不允许空值)时,就不会插入任何数据。不应该先插入10条ok语句吗?

我的代码:

代码语言:javascript
复制
        try {
            int[] results =  stmt.executeBatch();                
            return results;
        } catch (BatchUpdateException e) {
            int[] tmpres = e.getUpdateCounts();                
            for (i = 0; i < tmpres.length; i++) {
                System.out.println(tmpres[i]);
            }
        }

我在输出中看到前10条语句的更新计数为1,那么为什么没有插入数据呢?

向你问好,彼得

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-06 14:16:37

对这一问题的其他答复有些误导,至少在一般情况下是如此。

在大多数情况下,当将executeBatch()setAutoCommit(true)一起使用时

  • 批处理中的语句没有包装在隐式事务中,并且
  • 在BatchUpdateException之前处理的语句将被提交。

对于MySQL连接器/J(使用默认的rewriteBatchedStatements=false )、Microsoft驱动程序、Derby和HSQLDB,这是绝对正确的。(我只是运行实际的Java代码来确认。)

与JDBC的许多其他方面一样,在特定情况下的实际行为取决于您正在使用的JDBC驱动程序的具体实现。

票数 1
EN

Stack Overflow用户

发布于 2015-12-06 09:37:38

在您的配置中,一个批处理中的所有语句实际上都是在one事务中执行的。因此,如果任何插入失败,整个事务(即整个批处理)将被回滚。即使是自动提交。

票数 0
EN

Stack Overflow用户

发布于 2015-12-06 09:42:49

在本例中,所有语句都包含在同一个事务中,因此任何将导致错误的语句都将回滚整个事务。

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

https://stackoverflow.com/questions/34115819

复制
相关文章

相似问题

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