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

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

一、采用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)
上一篇 2021年10月3日 上午8:00
下一篇 2021年10月3日 上午8:00


相关推荐

  • debian连接无线网络_debian开启wifi

    debian连接无线网络_debian开启wifidebian6通过无线路由器上网。配置很简单。在/etc/network/interfaces文件中添加无线网卡的配置选项:autoloifaceloinetloopback#无线网卡选项ifacewlan0inetdhcp#以下可以配置路由器的网络名称和密码,不过测试时候发现好像不起作用,所以在稍后的命令行中再输入网络名称和密码打开终端,进入超级用户模式,敲入以下命令:ifconfigwlan0upiwconfigwlan0

    2022年10月19日
    5
  • 差分曼彻斯特编码到底该怎么看(萌新求教)

    差分曼彻斯特编码到底该怎么看(萌新求教)差分曼彻斯特编码如何区分 辨别两者的相同点 中间 夹在两条虚线 有一次跳变 两者的不同点 曼彻斯特码 从低到高 趋势 表示 1 或者 0 图中 从高到低表示 1 从低到高表示 0 差分曼彻斯特码 在每个时钟周期的起始处 虚线处 有跳变表示 0 无跳变则表示 1 或者说遇到 0 的时候 在起始处发生跳变 掌握了两者的规律后 再看原来这张图 从新走一遍路线 就会明白两者的区别

    2026年3月20日
    2
  • jstorm 使用demo

    jstorm 使用demo结合 fieldsGroupi 分组模式的一个 jstorm 使用实例 指定分组模式可以保证被指定的字段 如果相同值则 tuple 会分配给同个 task 处理 例如一个 tuple 有两个字段 field1 field2 如果指定 field1 为分组字段 现在有两个 tuple 分别是 tuple1 tuple2 tuple1 中 filed1 值为 a filed2 值为 b tuple2 的 filed1 值为 a filed2 值

    2026年3月16日
    2
  • Claude Code 正式下放Pro用户,国内如何使用?(附安装指南)

    Claude Code 正式下放Pro用户,国内如何使用?(附安装指南)

    2026年3月15日
    2
  • 挖矿脚本真的凶残!!

    挖矿脚本真的凶残!!事因:阿里突然发短信说我的阿里云服务器上面有挖矿程序!!!!!,顿时一惊,所以登陆到服务器。1.我用了top命令查看系统目前系统性能结果发现有个叫-bash的进程占用了99%的资源2.接下来我用kill-921252然后等一会又发现了这个脚本继续在占用资源,然后百度了下说这个挖矿可能有定时任务3.然后就采用了crontab-l查看定时任务列表果然有个定时任…

    2022年7月13日
    21
  • RapidXML的读写

    RapidXML的读写把如下图几个文件放到工程目录(hpp文件)新建工程进行读写测试,代码如下://ConsoleApplication1.cpp:定义控制台应用程序的入口点。//#include”stdafx.h”#include”rapidxml.hpp”#include”rapidxml_utils.hpp”//rapidxml::file#include”rapidx…

    2022年7月17日
    15

发表回复

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

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