iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java JDBC批量执行executeBatch方法详解
  • 326
分享到

Java JDBC批量执行executeBatch方法详解

2024-04-02 19:04:59 326人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致

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",'name" + i + "','email" + 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java JDBC批量执行executeBatch方法详解

本文链接: https://www.lsjlt.com/news/133694.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java JDBC批量执行executeBatch方法详解
    JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致...
    99+
    2024-04-02
  • JDBC 执行批量卡在了executeBatch()
    如果您在执行`executeBatch()`时卡住了,有几个可能的原因:1. 数据库连接被关闭:请确保在执行`executeBatc...
    99+
    2023-09-08
    JDBC
  • Java批量执行的方法有哪些
    Java中批量执行的方法有以下几种:1. 使用for循环进行批量执行:通过for循环遍历一个集合或数组,然后依次执行相同的操作。``...
    99+
    2023-08-09
    Java
  • Java实现JDBC批量插入原理详解
    目录一、说明二、实验介绍三、正式实验首先测试mysql接下来测试oracle四、存储过程五、总结一、说明 在JDBC中,executeBatch这个方法可以将多条dml语句批量执行,...
    99+
    2023-03-11
    Java JDBC实现批量插入 Java JDBC批量插入 Java JDBC插入
  • java jdbc执行sql语句的方法是什么
    在Java中使用JDBC执行SQL语句的方法主要有以下几种:1. 使用Statement对象执行SQL语句:```javaState...
    99+
    2023-09-27
    java jdbc sql
  • 批量执行sql语句的方法是什么
    批量执行sql语句的方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 代码如下: DECLARE @MyCo...
    99+
    2024-04-02
  • Java 执行CMD命令或执行BAT批处理方式
    Java 执行CMD命令或执行BAT批处理 背景 日常开发中总能遇到一些奇怪的需求,例如使用java执行cmd命令或者bat批处理文件,今天就简单记录一下使用过程。 使用 废话不多说...
    99+
    2024-04-02
  • Java Durid进行JDBC连接详解
    目录一、Druid简介二、Druid的优点三、使用 Durid 进行 JDBC MySQL 的连接3.1 添加 Druid 的依赖、数据库驱动3.2 创建 JDBC 工具类3.3 添...
    99+
    2024-04-02
  • Java对象方法的调用执行过程详解
    目录对象方法的调用执行过程调用方法的几种方式第一种第二种第三种对象方法的调用执行过程 编译器查看对象的声明类型和方法名。假设调用x.f(param),隐式参数为x声明为C类对象,需要...
    99+
    2024-04-02
  • jdbc使用PreparedStatement批量插入数据的方法
    目录批量插入1. 批量执行SQL语句2. 高效的批量插入批量插入 1. 批量执行SQL语句 当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次...
    99+
    2024-04-02
  • 详解Java的编译执行与解释执行
    目录一、前言二、理解Java的几个编译器三、Java采用的是解释和编译混合的模式JIT将字节码转换成最终的机器码四、编译与解释比较单独使用解释器的缺点单独使用JIT编译器的缺点一、前...
    99+
    2024-04-02
  • 阿里云服务器批量执行命令设置方法
    在日常使用阿里云服务器的过程中,可能会遇到需要执行大量命令的情况。如何批量执行命令,以提高工作效率呢?本文将详细介绍阿里云服务器批量执行命令的设置方法。 一、如何设置阿里云服务器批量执行命令阿里云服务器提供了批执行命令的工具,可以自动执行多...
    99+
    2023-11-09
    阿里 批量 命令
  • mybatis执行update批量更新时报错的解决方案
    目录执行update批量更新时报错在使用Mybatis 批量更新时定义Mapper  Dao接口中定义最后在service中调用同时执行多条sql的办法执行upd...
    99+
    2024-04-02
  • Mybatis执行多条语句/批量更新方式
    目录Mybatis执行多条语句/批量更新Mybatis实现多条语句Mybatis同时执行多条语句解决办法不外乎有三个总结Mybatis执行多条语句/批量更新 Mybatis实现多条语...
    99+
    2023-05-13
    Mybatis执行多条语句 Mybatis批量更新 Mybatis执行语句
  • Mybatis执行多条语句/批量更新的方法是什么
    本篇内容主要讲解“Mybatis执行多条语句/批量更新的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis执行多条语句/批量更新的方法是什么”吧!Mybatis执行多条语句/...
    99+
    2023-07-05
  • 详解OpenCV执行连通分量标记的方法和分析
    目录1.OpenCV 连通分量标记和分析1.1 OpenCV 连通分量标记和分析函数1.2 项目结构2.案例实现2.1 使用 OpenCV 实现基本的连通分量标记2.2 完整代码2....
    99+
    2024-04-02
  • Java实现线程按序交替执行的方法详解
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目:有a、b、c三个线程,使得它们按照abc依次执行10次。 二、解题思路 控制执行线程变量flag,利用lock锁来保证线程...
    99+
    2024-04-02
  • 详解Java执行groovy脚本的两种方式
    记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容;一种是执行groovy脚本; 二者都...
    99+
    2024-04-02
  • Python实现调用jar或执行java代码的方法详解
    目录简介安装jpypejava 代码python 调用代码简介 Python 作为一种灵活的软件开发语言在当今被广泛使用。在软件开发过程中,有时需要在 Python 项目中利用既有的...
    99+
    2022-12-21
    Python调用jar Python 执行Java代码 Python jar
  • 详解Pytest测试用例的执行方法
    pytest概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度地控制要测试的测试用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作