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

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

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


相关推荐

  • c++入门教程–-11递归

    c++入门教程–-11递归

    2021年3月12日
    343
  • 使用AWS迁移工具MGN迁移腾讯云到AWS「建议收藏」

    使用AWS迁移工具MGN迁移腾讯云到AWS「建议收藏」使用AWS迁移工具MGN迁移腾讯云服务器到AWS环境准备:OS:Centos7.9×64源端和目标端安全组都需要开通TCP443、1500端口1、创建设置模板2、安装Agent(源服务器)下载地址:https://aws-application-migration-service-<region>.s3.<region>.amazonaws.com/latest/linux/aws-replication-installer-init.py替换<r

    2022年10月5日
    2
  • 黑客养成手册「建议收藏」

    黑客养成手册「建议收藏」目录入侵他人电脑盗号攻击电脑控制别人计算机黑屏入侵他人电脑你是不是想学习到一些关于盗号、攻击别人计算机…的方法?其实这些方法很简单!现在就有个机会来了!我为大家讲解!首先申明这类技术可不要乱对别人使用啊!出事本人概不负责!下面就让我们来学习这些技术麻!盗号首先,我先给大家讲讲如何盗号:方法有两种在输入账号密码的时候,一个一个密码的猜,直到能登陆为止。然后记下来,那就是密码了!这…

    2022年9月17日
    3
  • VCL 控件分类_验证控件的分类

    VCL 控件分类_验证控件的分类TForm右下角小窗体中调整form显示位置。动态窗体:主窗体和动态生成的窗体(Project|Options|Forms)在一个头文件中添加另一个头文件(File|UseUnit)newTForm2(this);(this:指以此为容器)ShowModal(),Show();(是否当前窗体关闭后才能操作父窗体:模态方式,非模态方式)Close();(关闭窗体)(在Eve

    2022年9月25日
    2
  • java事务回滚案例_java事务控制

    java事务回滚案例_java事务控制疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实是事务未回滚导致的数据不一致。下面总结一下经验教训:Spring事务的管理操作方法编程式的事务管理实际应用中很少使用通过

    2022年8月30日
    5
  • Ascii code_扩展ascii码表

    Ascii code_扩展ascii码表ASCII码表如下:Bin(二进制)Oct(八进制)Dec(十进制)Hex(十六进制)缩写/字符解释000000000000x00NUL(null)空字符000000010110x01SOH(startofheadline)标题开始000000100220x02STX(startoftext)正文开始0000001103…

    2022年9月20日
    2

发表回复

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

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