什么是批处理?

2023-11-20

什么是批处理?

  • 当需要向数据库中插入大批量数据时,在批处理之前,要执行100条sql,就只需100此打开连接关闭连接和网络传输。
  • 批处理过程:将大量的SQL打包成一个批次,发送给服务器,服务器接收数据,打开批,一次执行批里的sql,这样减少与数据库的交互,提高程序的效率。

- 如何实现批处理?

实现方式一:Statement对象实现
需求:利用statement开发,插入dept表,100条
实现方式二:Preparedstatement对象实现
需求:利用preparedstatement对象,向dept表中插入100条数据

开发步骤:

  • 1.获取数据库连接
  • 2.获取传输器
  • 3.执行SQL(批处理,打成一个批次,统一发给服务器)
  • 4.解析结果集
  • 5.关闭资源
    注意:每次利用批处理完成插入100条数据,打一个批次是,要统一发送数据

事务优化

需求:让批处理程序快一点
设置事务的开关:conn.setAutoCommit(false);
手动提交事务:conn.commit();

两种方式的区别:

  1. Statement
    *  优点:在一次批处理中,SQL更加灵活
    *   缺点:发生SQL注入,效率低,拼接参数麻烦
  2. preparedstatement
    * 优点:防止SQL注入,提高执行效率(骨架缓存),占位符拼接参数
    * 缺点:在一次批处理中,只可以完成骨架相同的SQL
  3. 总结:
    **  在没使用批处理时,插入100条SQL的话,需要打开100次数据库连接并且需要100次网络传输。
    **  使用了批处理,效率不一定就高,跟数据库的版本,驱动的版本,硬件配置,网络速度都有关系
    ** 使用jdbc批处理时建议结合着事务优化一起做
    **  注意:不建议一次性向批中插入大量数据,会造成OutofMemory

代码实现如下:

package on.tedu.batch_批处理;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.Test;

import on.tedu.Util_工具类.JDBCUtils;

/**
 * 这个类用来完成批处理
 * 开发步骤:
 * 1.获取数据库连接
 * 2.获取传输器
 * 3.执行SQL(批处理,打成一个批次,统一发给服务器)
 * 4.解析结果集
 * 5.关闭资源
 * 两种方式的区别
 * 1.Statement
 * 优点:在一次批处理中,SQL更加灵活
 * 缺点:发生SQL注入,效率低,拼接参数麻烦
 * 
 * 2.perparedstatement
 * 优点:防止SQL注入,提高执行效率(骨架缓存),占位符拼接参数
 * 缺点:在一处批处理中,只可以完成骨架相同的SQL
 * 总结:
 * 在没使用批处理时,插入100条SQL的话,需要打开100此数据库连接并且需要100此网络传输
 * 使用了批处理,效率不一定就高,跟数据库的版本,驱动的版本,硬件配置,网络速度都有关系
 * 使用jdbc批处理时建议结合着事务处理优化一起做
 * 注意:不建议一次性向批中插入大量数据,会造成OutofMenory
 * @date 2018年3月26日
 *
 */
public class StatementBatch {

    @Test//单元测试
    public void statementBatch(){
        Connection conn = null;
        Statement st =null;
        ResultSet rs =null;
        try {
            //1.获取数据库连接
            conn = JDBCUtils.getConnection();
            //2.获取传输器对象
            st=conn.createStatement();
            //3.执行SQL(批处理,打成一个批次,统一发给服务器)   
            int rows=0;
            for(int i=0;i<100;i++){
                //普通插入100条数据的方法
                //rows =st.executeUpdate("insert into dept values(null,'"+i+"')");
                //利用批处理完成插入100条数据
                //并打一个批次
                st.addBatch("insert into dept values(null,'"+i+"')");
            }
            //统一把SQL发送给服务器
            st.executeBatch();
            System.out.println(rows);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JDBCUtils.close(conn, st, rs);
        }
    }
    @Test//插入数据 最终版
    public void PSBatch(){
        Connection conn=null;
        PreparedStatement ps =null;

        try {
            //1.获取数据库连接
            conn =JDBCUtils.getConnection();
            //设置数据的开关 - 把默认事务关闭 --非常关键
            conn.setAutoCommit(false);
            long start =System.currentTimeMillis();
            //2.获取传输器对象
            //3.执行SQL
            String sql ="insert into dept values(null,?)";
            ps=conn.prepareStatement(sql);//传入骨架
            //设置参数
            for(int i=0;i<100;i++){
                ps.setString(1, "ps"+i);//这里的i代表的是一个?号
                //把SQL添加到一个批次中
                ps.addBatch();//这里添加到批次里
            }
            //统一把SQL发给服务器
            int[] rows = ps.executeBatch();//这里返回一个int[],意识是影响了一行,就会得到一个数字
            //手动提交事务
            conn.commit();
            long end = System.currentTimeMillis();
            System.out.println(rows.length);
            System.out.println("-----------"+(end-start)+"-----------");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //5关闭资源,这里直接传子类对象,后面rs没有,就直接传null
            JDBCUtils.close(conn, ps, null);
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是批处理? 的相关文章

  • Beam技术

    一 简介 在大数据处理中 流计算技术包括Storm Spark Streaming和Flink 实际应用中还包括Storm Trident Samura以及Google MillWhell和亚马逊的Kinesis等技术 离线处理基本上都基于
  • windows批处理命令总结(超详细滴)

    总结自 https baike baidu com item E6 89 B9 E5 A4 84 E7 90 86 1448600 fr aladdin 文件夹管理 cd 显示当前目录名或改变当前目录 md 创建目录 rd 删除一个目录 d
  • MongoDB批量操作及与MySQL效率对比

    本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite 方法的使用 顺带与关系型数据库MySQL进行对比 比较这两种不同类型数据库的效率 如果只是想学习bulkWrite 的使用的看第一部分就行 测试环境 win7旗舰
  • Bat批处理生成带随机数的毫秒时间戳验证码

    second bat echo off set temp Spring gt Echo WScript Echo new Date getTime for f a in cscript nologo e jscript do set tim
  • iOS 批处理脚本打包-从编译到打包

    最近更新了Xcode9 由于项目需要 Xcode9打包出ipa后根据之前的脚本工具 继续我的批处理打包 但是 打包后居然出现了iOS 11 安装后图标没有改变还是原始的图标 为了验证 我再一次用Xcode8 打包 然后脚本打包 没有出现问题
  • Ubuntu 16.04 pycharm设置桌面快捷启动方式

    Ubuntu下所有的快捷方式都在 usr share applications 解压 这里我将pycharm下载并解压到了 home snakeson developer文件夹下 这里的pycharm sh是批处理执行文件 prcharm
  • Mysql存储过程(批量处理)如何编写

    1 什么事存储过程 存储过程是一组为了完成特定功能的SQL语句集合 一个存储过程是一个可编程的函数 它在数据库中创建并保存 一般由SQL语句和一些特殊的控制结构组成 使用存储过程不仅可以提高数据库的访问效率 同时也可以提高数据库使用的安全性
  • 获取使用system权限

    win7 win8 获取system权限 win7的服务 注册表 文件夹等一些东西 即便你是administrator也没法修改 真郁闷 那就用system权限吧 以下方法是让一个程序以system权限运行 而不是类似在右键修改权限获取文件
  • bat:使用bat脚本获得文件名,修改时间,大小

    echo for i in D J 1012 ftprun log do echo nxi echo zi字节 echo ti echo Y gt ni log pause
  • C#程序删除自身

    最近自己写了个卸载程序 将程序本身放到安装目录 执行卸载程序的时候将安装目录删除 卸载程序本身无法删除自身 遂尝试通过批处理删除 string fileName Path Combine AppDomain CurrentDomain Ba
  • 如何批量快速提取复制文件夹里所有文件夹名和文件名(包括所有子文件里的所有文件夹名和文件名)详细步骤

    推荐阅读 Windows 批处理 bat 语法大全 BAT批处理基本命令总结 南北极之间的博客 CSDN博客 windowsbat命令Windows 批处理 bat 语法大全 BAT批处理基本命令总结https blog csdn net
  • 批处理命令,函数传参和跳转

    文章目录 函数 参数传递 返回值 局部变量保护 goto 批处理系列 初步 set指令 设置变量 函数 函数封装是编程语言必不可少的环节 而函数在创建时 至少需要有一个函数标识 同时需要一块区域 来组成函数体 Dos中的函数用标签来标识 以
  • 批处理文件常用命令

    批处理有许多命令 1 Echo 命令 打开回显或关闭请求回显功能 或显示消息 如果没有任何参数 echo 命令将显示当前回显设置 语法 echo on off message Sample echo off echo hello world
  • dos命令弹出对话框---Msg命令详解

    dos命令弹出对话框 Msg命令详解 cmd下执行 在当前用户的桌面弹出一个对话框 显示哈哈二字 并且十秒后自动关闭 usename 是系统环境变量 表当前用户名 msg username time 10 哈哈 表示向局域网中的192 16
  • java学习笔记——JDBC 中 ResultSet、ResultSetMetaData配置对象的属性、批处理

    使用ResultSet ResultSetMetaData操作数据表 SELECT public void test1 1 获取连接 Connection conn null PreparedStatement ps null 4 执行 S
  • Streaming 102批处理之外的流处理世界

    简单回顾和路线图 在Streaming 101中 首先澄清了一些术语 介绍了有限数据 VS无限数据 有限数据源具有有限的大小 通常被称为 批处理 数据 无限数据源源可能具有无限大小 通常被称为 流 数据 在后边将会尽量避免使用批处理和流式传
  • 创建任意程序为系统服务

    网上流传的创建系统服务的方法我看着真麻烦 把我自己弄的很简单的代码共享下 create SERVICENAME bat ECHO OFF sc delete SERVICENAME sc create SERVICENAME start a
  • 在WINDOW 系统下如何用批处理命令生成代码

    如图要实现一个每次编译都会自动重新生成的代码 一般是 软件版本相关的代码最适合这种自动生成 上图中需在用到编译时间和日期 来直接上代码 BEGIN COLOR 07 cls echo off ECHO ECHO 自动生成软件版本号 ECHO
  • 批处理学习教程(4)------for的用法

    循环 for 1 如果批处理不具备批量处理的功能 那么它就徒有虚名了 而命令 for 在某种意义上彻底体现出了批处理的强大快捷省事批量的作用 在看过 for 后 可以归纳出 for 大致可以分三种常用的类型 或者叫使用方法 从针对的循环目标
  • 什么是批处理?

    什么是批处理 当需要向数据库中插入大批量数据时 在批处理之前 要执行100条sql 就只需100此打开连接关闭连接和网络传输 批处理过程 将大量的SQL打包成一个批次 发送给服务器 服务器接收数据 打开批 一次执行批里的sql 这样减少与数

随机推荐

  • LeetCode -- 1833. 雪糕的最大数量

    使用的算法 计数排序 贪心算法 计数排序 1 基于比较的排序算法 2 在对一定范围内的整数排序时 它的复杂度为 n k 其中k是整数的范围 快于任何比较排序算法 当O k gt O nlog n 的时候其效率反而不如基于比较的排序 基于比较
  • Kali Linux进阶篇:Nmap扫描网络空间存活主机技巧

    课前声明 1 本分享仅做学习交流 请自觉遵守法律法规 2 搜索 Kali与编程 学习更多网络攻防干货 一 背景介绍 nmap是一个网络连接端扫描软件 用来扫描网上电脑开放的网络连接端 确定哪些服务运行在哪些连接端 并且推断计算机运行哪个操作
  • Java对象的快速复制的几种方式

    浅拷贝 深度复制 BeanUtils copyProperties 对象的克隆是指创建一个新的对象 且新的对象的状态与原始对象的状态相同 当对克隆的新对象进行修改时 不会影响原始对象的状态 注释 clone 是object类的protect
  • Makefile中的include命令详解

    转载地址 点击打开链接 关于Makefile中的include命令 网上有很多介绍 比较普遍的说法是 Makefile中的include命令与C语言中的include命令类似 命令include file dep 即把file dep文件在
  • 最流行的五大数据模型工具

    当今的商业决策对基于天的数据依赖越来越强烈 然而 正确而连贯的数据流对商业用户做出快速 灵活的决策起到决定性的作用 建立正确的数据流和数据结构才能保证最好的结果 这个过程叫做数据建模 为了避免认为错误并且加快进度 我们需要使用专业的软件来帮
  • CUBLAS变量解释(1)

    变量类型 cublasOperation t 解释 该类型表明输入的密集矩阵的形式 其值有 CUBLAS OP N 非转置 CUBLAS OP T 转置 CUBLAS OP C 共轭转置 该函数对应于BLAS FORTRAN版 的变量字符
  • C++文本文件,二进制文件,write(),read(),map容器,seekg(),seekp(),tellg(),tellp()函数

    include
  • 百度富文本编辑器UEditor配置及功能实现详解

    当前功能基于PHP 其它语言流程大抵相同 大概流程 1 将docx文件上传到服务器中 2 使用PHPoffice PHPword实现将word转换为HTML 3 将HTML代码返回并赋值到编辑器中 1 编辑器配置修改 1 1 新增上传wor
  • ubuntu下安装Navicat

    Step1 打开Navicat官网 下载Navicat 网址 http www navicat com en download download html Navicat for MySQL 10 0 11 Download Downloa
  • SQL中IN、NOT IN的使用,以及NULL值的比较

    SQL中IN以及NOT IN的使用 以及NULL值的比较 在LeetCode写 608 树节点 题时 发现使用NOT IN在比较值为空的列时存在问题 记录在此 IN 和 NOT IN 在SQL中是用来指定一个列应该与其匹配的值的列表 IN
  • 【论文阅读】learning with noisy correspondence for cross-modal matching ------ 跨模态匹配,噪声对应

    注意 本博客非逐字逐句翻译论文 是作者阅读论文后根据自己的理解所写 预知论文详情 请参阅论文原文 论文标题 Learning with Noisy Correspondence for Cross modal Matching 作者 Zhe
  • 信号与系统3——傅里叶描述

    信号与系统3 傅里叶描述 1 复正弦信号和线性时不变系统的频率相应 1 频率响应Frequency response 2 离散LTI系统的频率响应Frequency response of Discrete time LTI system
  • qml程序如何启动

    1 qml主界面是Window或者是ApplicationWindow 在main cpp中可以使用 QQmlApplicationEngine engine engine load main qml 2 qml中的主界面是Rectangl
  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看 MSP430F5529库函数学习 串口 目录 代码 ADC初始化部分 引脚复位 ADC12 A init 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSele
  • 一种简单的计算item相似度算法

    计算item之间相似度是个有意义的工作 比如词的相似度就有很多应用场景 词相似度就有很多做法 工业上现在用得最多的可能是word2vec了 还有些算语义相似度的偏学术的办法 这里介绍一种比较简单可行的思路 不只是算词相似度 其他类型也可以
  • C语言深入学习--checklist4:宏、枚举、switch

    宏 1 宏的本质是什么 函数 语句 类型定义 或者其它 预编译器的文本替换 1 你知道语言设计者为什么设计宏吗 这些原因目前是否成立 在 C程序中 可以用宏代码提高执行效率 宏代码本身不是函数 但使用起来象函数 预处理器用复制宏代码的方式代
  • 频率与补偿(下)

    该章节为频率与补偿 下 本文选自Research on Damping Factor Control Frequency Compensation 和Research on Multistage Amplifier Frequency Co
  • 采用ATL模型代替lib dll 的调用

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 为WCE SDK下的例子 转为win32 自己移植 http www rayfile com zh cn files c638241c df8
  • slabinfo解读

    文件 proc slabinfo统计slab分配器相关信息 如 cat proc slabinfo slabinfo version 1 1 kmem cache 65 70 108 2 2 1 ip fib hash 10 112 32
  • 什么是批处理?

    什么是批处理 当需要向数据库中插入大批量数据时 在批处理之前 要执行100条sql 就只需100此打开连接关闭连接和网络传输 批处理过程 将大量的SQL打包成一个批次 发送给服务器 服务器接收数据 打开批 一次执行批里的sql 这样减少与数