JAVA批处理操作

  批处理,可以大幅度提升大量增、删、改的速度,就是对大数据操作有很大的效率提升。

  与上篇文章中提到的“连接池”相似。其实就是先将多次操作(增删改)打包,然后再一次发送执行

  主要用到两个方法:

   ?  打包:PreparedStatement.addBatch();

   ?  发送、执行:PreparedStatement.executeBatch();

  下面看做同一件事,用批处理和不用批处理的效率对比,源码如下:

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * @author-zhipeng
 *
 * 对比批处理与非批处理的差别(本例的循环所在位置)
 */
public class BatchTest {

	/**
	 * 对比“批处理”与“非批处理”的执行效率
	 */
	public static void main(String[] args) throws SQLException {
		//非批处理,插入100条数据所花费的时间
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100; i++)
			create(i);
		long end = System.currentTimeMillis();
		System.out.println("create:" + (end - start));
		//批处理,插入100条数据所花费的时间
		start = System.currentTimeMillis();
		createBatch();
		end = System.currentTimeMillis();
		System.out.println("createBatch:" + (end - start));
	}
	/**
	 * 非批处理-插入1条数据
	 */
	static void create(int i) throws SQLException {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//JdbcUtils为自定义的操作类,这里不多介绍
			conn = JdbcUtils.getConnection();
			String sql = "insert into user(name,birthday, money) values (?, ?, ?) ";
			ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, "no batch name" + i);
			ps.setDate(2, new Date(System.currentTimeMillis()));
			ps.setFloat(3, 100f + i);
			//执行插入
			ps.executeUpdate();
		} finally {
			//释放资源
			JdbcUtils.free(rs, ps, conn);
		}
	}
	/**
	 * 批处理-插入100条数据
	 */
	static void createBatch() throws SQLException {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtils.getConnection();
			String sql = "insert into user(name,birthday, money) values (?, ?, ?) ";
			ps = conn.prepareStatement(sql);
			//注意批处理与“非批处理”循环放的位置
			for (int i = 0; i < 100; i++) {
				ps.setString(1, "batch name" + i);
				ps.setDate(2, new Date(System.currentTimeMillis()));
				ps.setFloat(3, 100f + i);
				//关键方法1:打包
				ps.addBatch();
			}
			//关键方法2:执行
			int[] is = ps.executeBatch();
		} finally {
			JdbcUtils.free(rs, ps, conn);
		}
	}
}

  运行效果:

  这是执行100条数据的差距,可以想象对大数据的效率提升改有多大。

JAVA批处理操作,布布扣,bubuko.com

时间: 2024-11-03 03:47:42

JAVA批处理操作的相关文章

Hbase之使用回调函数进行批处理操作

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.client.coprocessor.Batch; import org.apa

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

Java File操作汇总

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41223841 本文通过大量的示例,介绍和讲解了Java File操作. 1)创建文件  2)删除文件  3)判断文件是否存在  4)创建文件夹  5)文件类型判断  6)获取文件信息 7)获取目录下文件名  8)递归打印所有文件名  9)递归删除整个文件夹  10)Properties类 11)SequenceInputStream类:连接多个流  12)对象序列化实现Ser

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

Java字节流操作

在java.io包中得操作主要有字节流与字符流两大类,两个类都有输入输出操作. 在字节流中,输出数据主要使用OutputStream类,输入使用的InputStream类. 在字符流中,输出数据使用Writer,输入数据使用Reader. 在Java中IO操作有相应的步骤,以文件的操作为例. (1)使用File类打开一个文件 (2)通过字节流或字符流的子类指定输出的位置. (3)进行读/写操作 (4)关闭输入/输出 字符流与字节流的区别: 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

java PreparedStatement操作oracle数据库

import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; //import java.sql.Statement; import java.sql.PreparedStatement; public class lx02{ public static void main(String[] args) throws SQLException, ClassNotFoundException

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

Java 字符串操作实例

本文章向大家分享一些java中操作字符串的一些实例,需要的可以参考一下. Java字符串比较 Java查找字符串最后一次出现的位置 Java删除字符串中的一个字符 Java字符串替换 Java字符串反转 Java字符串查找 Java字符串分割 Java字符串小写转大写 Java测试两个字符串区域是否相等 Java字符串性能比较测试 Java字符串优化 Java字符串格式化 Java字符串连接