超简单使用批处理(batch)操作数据库

超简单使用批处理(batch)操作数据库

批处理(batch)是什么

批处理的执行就好比快递员的工作:

未使用批处理的时候,快递员一次从分发点将一件快递发给客户;

使用批处理,则是快递员将所有要派送的快递都用车带到发放处派给客户。

批处理(batch)操作数据库

批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。

批处理操作数据库的过程主要是分两步:

1.将要执行的SQL语句保存

2.执行保存的SQL语句

如何实现批处理

  Statement和PreparedStatement都支持批处理操作,这里我们只说明PreparedStatement的批处理方式:

方法:

void addBatch()

将要执行的SQL先保存起来,先不执行

这个方法需要在在设置完所有的占位符之后调用

int[] executeBatch()

这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行

mysql默认批处理是关闭的,所以我们还需要去打开mysql的批处理:

我们需要在mysql的url地址中加入一下参数:

rewriteBatchedStatements=true

                     例如:URL = "jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true";

演示实例:

1.创建一张新的数据表

     CREATE TABLE test (
                     id INT PRIMARY KEY AUTO_INCREMENT,
                     uname VARCHAR(50)
      )

2、测试源码

 1              //向test表中插入10000条数据
 2               @Test//测试批处理
 3               public void testBatch(){
 4                      //向test表中插入10000条数据
 5                      Connection connection = null;
 6                      PreparedStatement ps = null;
 7                      try {
 8                             /*
 9                 *获取数据库连接  数据库链接操作在此不进行赘述
10                 *原生数据库操作可参考:http://www.cnblogs.com/Mr-Dawei/p/7455324.html
11                 */
12                             connection=XXXX;
13                             //sql语句编写
14                             String sql = "INSERT INTO test(uname) VALUES(?)";
15                             //获取PrepareStatement
16                             ps = connection.prepareStatement(sql);
17                             //创建一个for循环,来设置占位符参数数
18                             for(int i = 0; i < 10000 ;i++){
19                                    ps.setString(1,"test"+i);
20                                    //添加到批处理方法中,调用无参的,有参的是Statement来调用的!
21                                    ps.addBatch();
22                             }
23                             //获取一个时间戳 可以测试执行效率
24                             long start = System.currentTimeMillis();
25                             //统一执行执行批处理
26                             ps.executeBatch();
27                             //获取一个时间戳
28                             long end = System.currentTimeMillis();
29                             System.out.println("共花费了:"+(end-start));
30                      } catch (SQLException e) {
31                             e.printStackTrace();
32                      } finally{
33                    //逆序关闭资源
34                     }
35               }                                        

    通过操作结果我们可以清楚地看出其中批处理执行的效率提升多么明显

本人对批处理的了解浅显,若过路的诸位发现任何不对之处,还请多多之处。

时间: 2024-10-06 13:06:37

超简单使用批处理(batch)操作数据库的相关文章

Asp.net Core 2.1使用 EF Core 简单增删改查操作数据库

Asp.net Core 2.1使用 EF Core 简单增删改查操作数据库 大概步骤如下5步: 1.创建项目(Asp.net Core 2.1项目) 2.项目使用EF Core 3.建立实体 4.生成迁移文件(生成数据库) 5.使用VS工具生成视图.控制器代码 示例代码下载  https://github.com/ZhMartincheng/NetCoreDemo.git 1.创建项目(Asp.net Core 2.1项目) 选择.net core 版本2.1 基础项目创建成功 2.项目使用E

简单的DOS命令操作数据库

启动服务:net start 数据库服务名字 关闭服务:net stop 数据库服务名字 连接数据库:mysql -u用户名 -p密码 show databases -- 展示该服务器中所有的库 show tables; --展示该库中所有的表 select * from 表名 ; 查询指定表中的所有数据 建库: 语法: CREATE DATABASE 数据库名 DEFAULT CHARSET='utf8'; 使用库: 语法:USE 数据库名; use 数据库名 -- 选择要使用的数据库 删除库

JDBC操作数据库的学习(1)

单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的连接驱动,应用程序通过这些驱动来操作数据库: 但是这里就又有一个问题了,不同的数据库有各自的驱动程序,而一个应用程序要操作不同的数据库,那么就要懂得要使用的数据库的驱动如何操作,这样就增加了学习成本.好在我们使用Java开发应用,而Java中只需要使用JDBC就能操作所有的数据库,因为JDBC提供的

JDBC操作数据库之批处理

JDBC开发中,操作数据库需要和数据库建立连接,然后将要执行的SQL语句发送到数据库服务器,最后关闭数据库连接,都是按照这样的操做的,如果按照此流程要执行多条SQL语句,那么就要建立多个数据库连接,将时间浪费在数据库连接上,针对这样的问题,JDBC给出了一个很好的解决方案------JDBC的批处理. 示例代码 (1)index.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8&qu

Java_Web使用简单的批处理操作

之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到.所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太好用.今天闲来无事,就决定尝试一下最原始的办法,使用记事本+Tomcat进行开发.虽然效率不是很高,但是熟悉了最基本的一些操作,也算是颇有收获.而在在篇博客中,我将分享一下我觉得今天最大的收获. 我们都知道,我们要将项目在Tomcat中部署运行,所使用的.class文件需要保存到一个特定的目录下(当

EF操作数据库的步骤和一些简单操作语句

这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面的内容,直接点击这个链接,因为写的真的不错:https://www.cnblogs.com/gosky/p/5751815.html. 我个人还没有对EF相关的内容进行详细的整理,所以这篇随笔的参考意义不大,只是贴一些代码上去,以后有机会有时间,会对相关内容做一个总结. 使用EF操作数据库的详细步骤

初学时简单的操作数据库方法

一:cmd操作数据库--开启数据库net start mysql --关闭数据库net stop mysql --1:连接数据库mysql -uroot -p --2:查询数据库show databases; --3:设置字符编码set names gbk; --4:增加数据库create database if not exists 库名; --5:查看数据库的创建语句(是如何创建的)show create database 库名: --6:删除数据库drop database if exis

编写hibernate 操作数据库的dao层简单代码

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久

Linux环境下proc的配置c/c++操作数据库简单示例

在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1.对Linux的命令和脚本的使用不够数量.2.对Linux的个文件夹的作用不够了解;(打算下次补充一篇这样的总结博客.)3.英文还是很差劲的我.好如真题. 由于我引进配置好了,不想在折腾了,所以就没有在重现错误,只是说一下思路和配置文件的内容. 1.oracle用户根目录下的.bash_profile