,,Java JDBC批量执行executeBatch方法详解

,,Java JDBC批量执行executeBatch方法详解

本文主要介绍Java JDBC批处理执行方法的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

JDBC事务

在数据库中,所谓事务是指一组逻辑操作单元,可以将数据从一种状态转换到另一种状态。为了保证数据库中数据的一致性,数据操作应该是离散的、分组的逻辑单元:当全部完成时,可以保持数据的一致性,当这个单元中的某些操作失败时,整个事务应该被视为一个错误,从起点开始的所有操作都应该回滚到起始状态。

事务操作:首先定义一个事务的开始,然后修改数据。此时,如果您提交,这些修改将被永久保存。如果回滚,数据库管理系统将放弃所有修改,并返回到事务开始时的状态。

事务的ACID属性

1.原子性(Atomicity)

原子性意味着事务是一个不可分割的工作单元,事务中的所有操作要么发生,要么不发生。

2.一致性(一致性)

事务必须将数据库从一种一致状态更改为另一种一致状态。(数据不会被破坏)

3.隔离(隔离)

事务隔离是指一个事务的执行不能被其他事务干扰,即一个事务中使用的操作和数据与其他并发事务隔离,并发事务之间不能互相干扰。

4.持久性

持久性意味着,一旦提交了事务,它对数据库中数据的更改将是永久的,并且后续操作和数据库故障不会对它产生任何影响。

在JDBC,默认情况下自动提交交易。每次执行SQL语句,如果执行成功,会自动提交到数据库,但不能回滚。

要使多个SQL语句作为一个事务执行:

在执行语句之前调用连接对象的setAutoCommit(false );取消自动提交事务。

在所有SQL语句成功执行后调用commit();方法来提交事务。

发生异常时,调用roll back();方法回滚事务。

JDBC批量执行

当需要批量插入或更新记录时。可以采用Java批量更新机制,允许一次向数据库提交多条语句进行批量处理。一般来说,它比单一提交处理效率更高。

JDBC的批处理语句包括以下两种方式:

AddBatch(String):添加需要批处理的SQL语句或参数;

execute batch();执行批处理语句;

clear batch();透明散装包装

通常,我们会遇到两种批量执行SQL语句的情况:

多个SQL语句的批处理;

for(int I=1;我5000;i ) {

sql='insert into person(id,name,email)值(' I ',' name' i ' ',' email ' I ' ')';

stmt . add batch(SQL);

如果((我1)00==0){

//批处理

stmt . execute batch();

//清除stmt中累积的参数列表

stmt . clear batch();

}

}

SQL语句的批量参数传输;

for(int I=1;i100000i ){

pstmt.setInt(1,I);

pstmt.setString(2,' name ' I);

pstmt.setString(3,' email ' I);

PS TMT . add batch();

如果((我1)00==0){

//批处理

pstmt . execute batch();

//清空pstmt中累积的sql

pstmt . clear batch();

}

}

当JDBC执行SQL语句时,有两个接口进行处理,即PreparedStatement,Statement。一般来说,JDBC比PreparedStatement更常用。

但是,在批处理执行中,PreparedStatement有点缺语句。

PS=conn . prepare statement(SQL);

for(int I=0;i10i ){

ps.setString(1,' 1 ');

//PreparedStatement批处理方法1

PS . add batch();

}

//PreparedStatement批处理模式2

Ps.addBatch('静态SQL ');

PS . execute batch();

这是正常执行的。

但是将PreparedStatement放在其中是行不通的,如下所示:

for(int I=0;i10i ){

PS=conn . prepare statement(SQL);

ps.setString(1,' 1 ');

PS . add batch();

}

PS . execute batch();

语句适用于使用以下代码对sql进行循环赋值:

语句ST=conn . create statement();

for(int I=0;i10i ){

St.addBatch('静态sql . ');

}

ST . execute batch();

这是所有语句的正常执行。

总结:造成这样的原因是

语句ST=conn . create statement();这里不需要放SQL语句。

PS=conn . prepare statement(SQL);这必须把初始SQL语句。

JDBC的批处理不能加入select语句,否则将抛出一个异常:

java.sql.BatchUpdateException:无法通过executeUpdate()发出SELECT。

在com。MySQL . JDBC . statement impl . execute batch(statement impl . Java:1007)

以上就是本文对Java JDBC批处理执行方法的详细解释。有关Java JDBC批处理执行的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: