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條數據的差距,能夠想象對大數據的效率提升改有多大。

 

版權聲明:本文博客原創文章。博客,未經同意,不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM