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

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

一、采用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • XLSTransformer 导出[通俗易懂]

    XLSTransformer 导出[通俗易懂]XLSTransformer导出Excel文件

    2022年7月24日
    44
  • ResNet+FPN实现+白嫖代码「建议收藏」

    ResNet+FPN实现+白嫖代码「建议收藏」===========================================================有现成的代码:https://github.com/Kongsea/FPN_TensorFlow推荐根据该博客来学习:https://www.jianshu.com/p/324af87a11a6============================================================纸上得来终觉浅,须知此事要coding!ResNet+FPN

    2022年5月4日
    87
  • 获取不同长度的UUID[通俗易懂]

    获取不同长度的UUID[通俗易懂]在公司,有时候让处理一些命名规则时,要使用一个唯一标识,还是十六进制的,需要多少位看领导心情.怎么做呢?你别说用随机产生组合的方法啊?虽然那个可行,但是我觉得难受.知道有UUID这个玩意儿之后,那就好办了.UUID含义是通用唯一识别码(UniversallyUniqueIdentifier),这是一个软件建构的标准,也是被开源软件基金会(OpenSoftwareFoundatio

    2022年8月10日
    13
  • 软件概要设计与详细设计

    (一)概要设计的任务与步骤1、总体设计的必要性:可以站在全局角度上,花较少成本,从抽象的层次上分析对比多种可能性的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。2、总体设计的两个阶段:(1)系统设计阶段:确定系统的具体实现方案(2)结构设计阶段:确定软件结构。3、总体设计的9个步骤:(1)设想供选择的方案(2)选取…

    2022年4月6日
    46
  • win10 cuda安装_查看cudnn是否安装成功

    win10 cuda安装_查看cudnn是否安装成功官方安装教程CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.htmlcuDNN:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindowsWIN10安装CUDA10CUDA…

    2022年5月3日
    86
  • laravel 5.6 请教邮件中的cc,bcc是什么意思,有什么用?

    laravel 5.6 请教邮件中的cc,bcc是什么意思,有什么用?

    2021年10月24日
    83

发表回复

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

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