您好,欢迎来到吉趣旅游网。
搜索
您的当前位置:首页JavaJDBC批量执行executeBatch方法详解

JavaJDBC批量执行executeBatch方法详解

来源:吉趣旅游网
JavaJDBC批量执⾏executeBatch⽅法详解

JDBC事务

在数据库中,所谓事务是指⼀组逻辑操作单元,使数据从⼀种状态变换到另⼀种状态。为确保数据库中数据的⼀致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的⼀致性可以保持,⽽当这个单元中的⼀部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。

事务的操作:先定义开始⼀个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃您所作的所有修改⽽回到开始事务时的状态。

事务的ACID属性

1. 原⼦性(Atomicity)

原⼦性是指事务是⼀个不可分割的⼯作单位,事务中的操作要么都发⽣,要么都不发⽣。 2. ⼀致性(Consistency)

事务必须使数据库从⼀个⼀致性状态变换到另外⼀个⼀致性状态。(数据不被破坏)

3. 隔离性(Isolation)

事务的隔离性是指⼀个事务的执⾏不能被其他事务⼲扰,即⼀个事务内部的操作及使⽤的数据对并发的其他事务是隔离的,并发执⾏的各个事务之间不能互相⼲扰。4. 持久性(Durability)

持久性是指⼀个事务⼀旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

在JDBC中,事务默认是⾃动提交的,每次执⾏⼀个 SQL 语句时,如果执⾏成功,就会向数据库⾃动提交,⽽不能回滚为了让多个 SQL 语句作为⼀个事务执⾏:

1. 执⾏语句前调⽤ Connection 对象的 setAutoCommit(false); 以取消⾃动提交事务2. 在所有的 SQL 语句都成功执⾏后,调⽤ commit(); ⽅法提交事务3. 在出现异常时,调⽤ rollback(); ⽅法回滚事务。

JDBC批量执⾏

当需要成批插⼊或者更新记录时。可以采⽤Java的批量更新机制,这⼀机制允许多条语句⼀次性提交给数据库批量处理。通常情况下⽐单独提交处理更有效率JDBC的批量处理语句包括下⾯两个⽅法:

addBatch(String):添加需要批量处理的SQL语句或是参数;executeBatch();执⾏批量处理语句;clearBatch();清除批量打包

通常我们会遇到两种批量执⾏SQL语句的情况:多条SQL语句的批量处理;

for (int i = 1; i < 5000; i++) {

sql = \"insert into person(id,name,email) values(\" + i\ stmt.addBatch(sql); if((i+1)%1000==0){ //批量处理

stmt.executeBatch();

//清除stmt中积攒的参数列表 stmt.clearBatch(); }}

⼀个SQL语句的批量传参;

for(int i=1;i<100000;i++){ pstmt.setInt(1, i);

pstmt.setString(2, \"name\"+i); pstmt.setString(3, \"email\"+i); pstmt.addBatch(); if((i+1)%1000==0){ //批量处理

pstmt.executeBatch(); //清空pstmt中积攒的sql pstmt.clearBatch(); }}

JDBC执⾏SQL语句,有两个处理的接⼝,⼀个PreparedStatement,Statement,⼀般操作JDBC⽐较⽤得多的还是PreparedStatement

不过在执⾏批量,PreparedStatement有点不够Statement

ps = conn.prepareStatement(sql);for(int i = 0;i<10;i++){ ps.setString(1,\"1\");

//PreparedStatement批处理⽅式⼀ ps.addBatch();}

//PreparedStatement批处理⽅式⼆ps.addBatch(\"静态SQL\");ps.executeBatch();

这个是正常执⾏的

可是把PreparedStatement放到⾥⾯就没效了,以下:

for(int i = 0;i<10;i++){

ps = conn.prepareStatement(sql); ps.setString(1,\"1\"); ps.addBatch();}

ps.executeBatch();

Statement适合循环赋值到sql,代码以下:

Statement st = conn.createStatement();for(int i = 0;i<10;i++){

st.addBatch(\"静态sql..........\");}

st.executeBatch();

这个是正常执⾏所有的语句

总结:造成这样的原因是

Statement st = conn.createStatement();这⾥可以不放SQL语句ps = conn.prepareStatement(sql);这个⼀定要放初始SQL语句JDBC的批处理不能加⼊select语句,否则会抛异常:

java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate(). at com.MySQL.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)

到此这篇关于Java JDBC批量执⾏executeBatch⽅法详解的⽂章就介绍到这了,更多相关Java JDBC批量执⾏executeBatch内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务