JDBC: 批量处理提高SQL处理速度详解编程语言
2023-06-13 09:20:30 时间
当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率
JDBC的批量处理语句包括下面两个方法:
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;
通常我们会遇到两种批量执行SQL语句的情况:
多条SQL语句的批量处理;
一个SQL语句的批量传参;
测试代码:
import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.Statement; import org.junit.Test; import xuezaipiao1.JDBC_Tools; /** * 向Oracle 的 temp 数据表中添加 10万 条记录 * 测试如何插入,用时最短 public class JDBCTest { /** * 1.使用 Statement . * 测试用时:35535 @Test public void testBbatchStatement() { Connection conn = null; Statement statement = null; String sql = null; try { conn = JDBC_Tools.getConnection(); JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis(); statement = conn.createStatement(); for(int i = 0;i 100000;i++){ sql = "INSERT INTO temp values("+(i+1) +",name_"+(i+1)+",13-6月 -15)"; statement.executeUpdate(sql); long endTime = System.currentTimeMillis(); System.out.println("Time : "+(endTime - beginTime)); JDBC_Tools.commit(conn); } catch (Exception e) { e.printStackTrace(); JDBC_Tools.rollback(conn); }finally{ JDBC_Tools.relaseSource(conn, statement); /** * 使用PreparedStatement * 测试用时:9717 @Test public void testBbatchPreparedStatement() { Connection conn = null; PreparedStatement ps = null; String sql = null; try { conn = JDBC_Tools.getConnection(); JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis(); sql = "INSERT INTO temp values(?,?,?)"; ps = conn.prepareStatement(sql); Date date = new Date(new java.util.Date().getTime()); for(int i = 0;i 100000;i++){ ps.setInt(1, i+1); ps.setString(2, "name_"+i); ps.setDate(3, date); ps.executeUpdate();//9717 long endTime = System.currentTimeMillis(); System.out.println("Time : "+(endTime - beginTime)); JDBC_Tools.commit(conn); } catch (Exception e) { e.printStackTrace(); JDBC_Tools.rollback(conn); }finally{ JDBC_Tools.relaseSource(conn, ps); /** * 测试用时 : 658 @Test public void testBbatch() { Connection conn = null; PreparedStatement ps = null; String sql = null; try { conn = JDBC_Tools.getConnection(); JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis(); sql = "INSERT INTO temp values(?,?,?)"; ps = conn.prepareStatement(sql); Date date = new Date(new java.util.Date().getTime()); for(int i = 0;i 100000;i++){ ps.setInt(1, i+1); ps.setString(2, "name_"+i); ps.setDate(3, date); //积攒SQL ps.addBatch(); //当积攒到一定程度,就执行一次,并且清空记录 if((i+1) % 300==0){ ps.executeBatch(); ps.clearBatch(); //总条数不是批量值整数倍,则还需要在执行一次 if(100000 % 300 != 0){ ps.executeBatch(); ps.clearBatch(); long endTime = System.currentTimeMillis(); System.out.println("Time : "+(endTime - beginTime)); JDBC_Tools.commit(conn); } catch (Exception e) { e.printStackTrace(); JDBC_Tools.rollback(conn); }finally{ JDBC_Tools.relaseSource(conn, ps); }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10992.html
cjavaoracle相关文章
- sql插数据语句_sql语句批量添加数据
- 使用 App Store Connect API 批量创建内购商品
- 将表里的数据批量生成INSERT语句的存储过程 增强版
- Node.js批量抓取高清妹子图片 增强版详解编程语言
- 高效TDDL批量插入详解编程语言
- 文件MySQL如何批量导入SQL文件(mysql导入sql)
- MyBatis批量插入返回主键详解编程语言
- 极速上手:使用SQL访问Oracle数据库(sql访问oracle数据库)
- Linux下批量重命名文件的简单方法(linux批量重命名)
- Linux批量重命名操作指南(批量重命名linux)
- Linux下轻松实现批量重命名(批量重命名linux)
- Linux 下批量重命名的技巧(批量重命名linux)
- 快速导入Redis数据:批量操作提高效率(redis批量导入数据)
- 快速使用JDBC连接SQL Server数据库(jdbc连接sqlserver数据库)
- Oracle中增加列的SQL语法指南(oracle增加列sql)
- 一键快速:ms sql服务器批量导入图片(图片批量导入 mssql)
- Linux环境下执行SQL语句的步骤与方法(linux下执行sql)
- sql探索SQL Server:前六条SQL语句(sqlserver前六条)
- MySQL批量执行SQL脚本,给你快速上手(c mysql批量sql)
- 批量,快速验证Redis服务可用性(批量验证redis)
- 利用Redis集合快速实现批量数据删除(redis集合批量删除)
- 抢占高薪 Oracle SQL 面试之路(oracle sql面试)
- Oracle SQL 分类整理技巧(oracle sql归类)
- 使用Redis实现远程批量删除(redis远程批量删除)
- ASP页面静态化批量生成代码分享(多种方法)
- sql存储过程批量删除数据的语句
- C#批量更新sql实例