JDBC的批处理操作

举报
兮动人 发表于 2021/10/24 22:45:07 2021/10/24
【摘要】 1.1 JDBC的批处理操作 1.1.1 什么是批处理之前进行JDBC的操作的时候,都是一条SQL语句执行。现在如果使用批处理,可以将一批SQL一起执行。 1.1.2 批处理基本使用package com.xdr630.jdbc.demo6;import java.sql.Connection;import java.sql.PreparedStatement;import java.sq...

1.1 JDBC的批处理操作

1.1.1 什么是批处理

之前进行JDBC的操作的时候,都是一条SQL语句执行。现在如果使用批处理,可以将一批SQL一起执行。

1.1.2 批处理基本使用

package com.xdr630.jdbc.demo6;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;

import org.junit.Test;

import com.xdr630.jdbc.utils.JDBCUtils;

/**
 * 批处理的操作
 * @author xdr
 *
 */
public class JDBCDemo6 {
	

	@Test
	/**
	 * 批处理基本操作
	 */
	public void demo1(){
		Connection conn = null;
		Statement stmt = null;
		try{
			// 获得连接:
			conn = JDBCUtils.getConnection();
			// 创建执行批处理对象:
			stmt = conn.createStatement();
			// 编写一批SQL语句:
			String sql1 = "create database test1";
			String sql2 = "use test1";
			String sql3 = "create table user(id int primary key auto_increment,name varchar(20))";
			String sql4 = "insert into user values (null,'aaa')";
			String sql5 = "insert into user values (null,'bbb')";
			String sql6 = "insert into user values (null,'ccc')";
			String sql7 = "update user set name = 'mmm' where id = 2";
			String sql8 = "delete from user where id = 1";
			// 添加到批处理
			stmt.addBatch(sql1);
			stmt.addBatch(sql2);
			stmt.addBatch(sql3);
			stmt.addBatch(sql4);
			stmt.addBatch(sql5);
			stmt.addBatch(sql6);
			stmt.addBatch(sql7);
			stmt.addBatch(sql8);
			// 执行批处理:
			stmt.executeBatch();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(stmt, conn);
		}
	}
}
  • 执行后的结果
    在这里插入图片描述

1.1.3 批量插入(使用PreparedStatement)

@Test
	/**
	 * 批量插入记录:
	 * * 默认情况下MySQL批处理没有开启的,需要在url后面拼接一个参数即可。
	 */
	public void demo2(){
		// 记录开始时间:
		long begin = System.currentTimeMillis();
		Connection conn = null;
		PreparedStatement pstmt = null;
		try{
			// 获得连接:
			conn = JDBCUtils.getConnection();
			// 编写SQL语句:
			String sql = "insert into user values (null,?)";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			for(int i=1;i<=10000;i++){
				pstmt.setString(1, "name"+i);
				// 添加到批处理
				pstmt.addBatch();
				// 注意问题:
				// 执行批处理
				if(i % 1000 == 0){
					// 执行批处理:
					pstmt.executeBatch();
					// 清空批处理:
					pstmt.clearBatch();
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(pstmt, conn);
		}
		long end = System.currentTimeMillis();
		System.out.println((end-begin));
	}
  • 修改db.properties配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test1?rewriteBatchedStatements=true
username=root
password=1234
  • 执行完成后就会插入一万条记录
    在这里插入图片描述
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。