本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。