两种方式完成批处理的优缺点

两种方式完成批处理的优缺点

一、采用Statement实现批处理

  1. 使用Statement 对象添加要批量执行sql语句(如下)
 Statement.addBatch(sql1);
 Statement.addBatch(sql2);
 Statement.addBatch(sql3);
  1. 执行批处理Sql语句:Statement.executeBath();
  2. 清除批处理命令:Statement.clearBatch();

 

  • 优点:可以向数据库发送多条不同的SQL语句
  • 缺点:SQL语句没有预编译
  • 当向数据库发送多条语句相同,但仅参数不同的SQL语句时。需重复写上很多条SQL语句。

测试代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import com.mysql.jdbc.Driver;

/*
 * statement 批处理
 * 
*/

public class StatementBatch {
	public static void main(String[] args) throws Exception {
		//加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		//创建Statement
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybase","root","root123");
		System.out.println("你好啊"+conn);
		Statement stm = conn.createStatement();
		String sql1 = "insert into test(ename,job,deptno) values('小龙人','clerk',20)";
		String sql2 = "insert into test(ename,job,deptno) values('美人鱼','leader',10)";
		String sql3 = "update test set ename = '小龙人1' where ename = '小龙人'";
		//添加批处理
		stm.addBatch(sql1);
		stm.addBatch(sql2);
		stm.addBatch(sql3);
		//执行批处理
		stm.executeBatch();
		//清楚批处理SQL
		stm.clearBatch();
		//释放资源
		stm.close();
		conn.close();		
	}
}

 

二、采用PreparedStatement.addBatch() 实现批处理

优点:发送的是预编译后的SQL语句,执行效率高。

缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中插入数据,或批量更新表的数据。

 测试代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class TestPreparedStatementbatch {

	public static void main(String[] args) throws Exception {
		//加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybase", "root", "root123");
		System.out.println(conn);
		//创建PreparedStatement对象
		String sql = "insert into test( empno, ename) values(?,?)";
		PreparedStatement pstm = conn.prepareStatement(sql);
		//pstm 绑定数据
		for(int i= 4020;i<4080;i++){
			pstm.setInt(1, i);
			pstm.setString(2, "蒋静"+i);
			//添加批处理
			pstm.addBatch();
			//执行批处理,当i是100的倍数时,执行,执行完清除掉
			if(i%100==0){
				pstm.executeBatch();
				pstm.clearBatch();
			}
		}
		//将批处理余下的语句执行完毕
		pstm.executeBatch();
		//释放资源
		pstm.close();
		conn.close();
	}

}

 三、小结

搭配着使用就完了呗。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114782.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【跃迁之路】【502天】刻意练习系列261(2018.06.22)

    【跃迁之路】【502天】刻意练习系列261(2018.06.22)

    2022年4月3日
  • 宽字节注入原理分析[通俗易懂]

    宽字节注入原理分析[通俗易懂]什么是宽字节?如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节。像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节英文默认占一个字节,中文占两个字节什么是宽字节注入?原理:宽字节注入是利用了mysql的一个特性,即mysql在使用GBK编码时,在url解码时会认为两个字符是一个汉字(前一个ASCII码要大于128,才表示到汉字的范围)通常情况下,一个utf-8编码的汉子占用3个字节,一个GBK编

    2022年10月15日
  • mysql DISTINCT 的实现与优化

    mysql DISTINCT 的实现与优化

    2021年8月29日
  • anaconda添加清华镜像源_anaconda清华镜像源

    anaconda添加清华镜像源_anaconda清华镜像源在安装tensorflow时,不知道怎么了,一直安装不上去,所以重新配置了下镜像安装环境:win10+anaconda3.5删除之前的镜像源,恢复默认状态condaconfig–remove-keychannels添加清华镜像源清华大学开源软件镜像站#添加镜像源condaconfig–addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/maincondaconfig–addchann

    2022年10月30日
  • android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

    在做一个view背景特效的时候被坐标的各个获取方法搞晕了,几篇抄来抄去的博客也没弄很清楚。现在把整个总结一下。其实只要把下面这张图看明白就没问题了。涉及到的方法一共有下面几个:view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()view获取自身宽高:getHeight(),getWidth()motionEvent获取坐标:getX(),getY

    2022年3月11日
  • 【C语言】getchar 函数的正确使用

    【C语言】getchar 函数的正确使用目录一、getchar函数二、缓冲区1、什么是缓冲区2、为什么要存在缓冲区3、缓冲区的类型4、缓冲区的刷新三、getchar函数的正确使用1、getchar的换行问题2、getchar与scanf的混合使用一、getchar函数从上面的介绍来看,我们要正确使用getchar函数,首先得了解什么是缓冲区。二、缓冲区1、什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号