手动提交方式

   public static void  batchInsert() throws SQLException {Connection conn = null;PreparedStatement  stmt = null;try {long startTime = System.currentTimeMillis();Class.forName(DRIVER).newInstance();conn = DriverManager.getConnection(DBURL, USER, PSWD);conn.setAutoCommit(false);stmt= conn.prepareStatement("INSERT INTO TEST(ID,USERNAME,AGE) VALUES (?,?,?)");int num = 0;for (int i = 0; i < 1000000; i++) {num++;stmt.setString(1, String.valueOf(i));stmt.setString(2, "第"+i+"个");stmt.setString(3, String.valueOf(i));stmt.addBatch();if(num > 50000){stmt.executeBatch();conn.commit();num = 0;}}stmt.executeBatch();conn.commit();long endTime = System.currentTimeMillis();System.out.println("============"+ (endTime - startTime) / 1000);String sqls = "select count(*) as cnt from test";ResultSet rs = stmt.executeQuery(sqls);while (rs.next()) {String cnt = rs.getString("cnt");System.out.println("当前记录数:" + cnt);}} catch (Exception e) {conn.rollback();e.printStackTrace();System.out.print(e.getMessage());} finally {try {stmt.close();conn.close();} catch (SQLException e) {System.out.print("Can't close stmt/conn because of " + e.getMessage());}}}

关键代码在于

 conn.setAutoCommit(false);conn.commit();

在插入数据之前,先把自动提交关闭,之后把数据全放进缓存之后,手动一次提交。
在数据字段少的情况下,插入速度很快
在对于字段多达两百个的就会越来越慢,看下面的代码

OraclePreparedStatement 批量提交

查看源代码之后,看到,在使用OraclePreparedStatement 之前,需要先代理出oracle这个类。之后会设置数组长度,本质上意思是,在使用这个方式时,需要初始化数组长度。在对于很多字段方面,效率也有明显的提升

  public static void  batchOraclePreparedStatement() throws SQLException {Connection conn = null;PreparedStatement  stmt = null;OraclePreparedStatement oraclePreparedStatement = null;try {long startTime = System.currentTimeMillis();Class.forName(DRIVER).newInstance();conn = DriverManager.getConnection(DBURL, USER, PSWD);stmt= conn.prepareStatement("INSERT INTO TEST(ID,USERNAME,AGE) VALUES (?,?,?)");oraclePreparedStatement = stmt.unwrap(OraclePreparedStatement.class);oraclePreparedStatement.setExecuteBatch(100);int num = 0;for (int i = 0; i < 100; i++) {num =  num++;stmt.setString(1, String.valueOf(i));stmt.setString(2, "第"+i+"个");stmt.setString(3, String.valueOf(i));int i1 = oraclePreparedStatement.executeUpdate();System.out.println("==============="+i1);System.out.println("成功添加"+i);}long endTime = System.currentTimeMillis();System.out.println("============"+ (endTime - startTime) / 1000);} catch (Exception e) {e.printStackTrace();System.out.print(e.getMessage());} finally {try {stmt.close();conn.close();} catch (SQLException e) {System.out.print("Can't close stmt/conn because of " + e.getMessage());}}}

JAVA Oracle插入大量数据优化相关推荐

  1. oracle插入优化,oracle插入大量数据优化方式

    1. 使用绑定变量优化插入速度 未优化前代码如下 create table t(x int); create or replace procedure proc1 as begin for i in ...

  2. oracle中插入日期型数据,ORACLE插入日期数据

    ORACLE插入日期数据 oracle数据库插入日期型数据 往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ...

  3. oracle 数据有引号,oracle插入字符串数据时字符串中有'单引号问题

    使用insert into(field1,field2...) values('val1','val2'...)时,若值中有单引号时会报错. 处理方法:判断一下val1,val2中是否含有单引号,若含 ...

  4. oracle的日期插入,ORACLE插入日期数据

    ORACLE插入日期数据 oracle数据库插入日期型数据 往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ...

  5. Oracle插入大量数据

    原 Oracle 插入大量数据https://blog.csdn.net/tianlesoftware/article/details/4745144版权声明: https://blog.csdn.n ...

  6. Oracle 插入大量数据时不要写日志

    1. 采用高速的存储设备,提高读写能力,如:EMC 和NetApp, 2. 假如tab1表中的没有数据的话 DROP   TABLE   TAB1; CREATE   TABLE   TAB1   A ...

  7. oracle语句优化pl sql语句,求oracle插入初始数据pl/sql语句优化,该怎么处理(2)

    SQL codeCREATE OR REPLACE PROCEDURE thi_pro AS randomnum NUMBER; randomnum2 NUMBER; randomnum3 NUMBE ...

  8. 如何快速向oracle插入大量数据,以及注意事项

    首先创建数据库,这里以oracle为例子,好像mysql差不多也是这样的 CREATE TABLE USSER2(ID NUMBER(10,0) NOT NULL ENABLE,NAME2 VARCH ...

  9. oracle 插入表数据时,自动生成ID

    今天因为某些原因,需要把达梦数据库(oracle)里面的一张视图的大量数据某些字段插到另外一张表里面,但是又因为这张视图没有ID,插入表ID又不能为null,这时候就可以在插入的时候自动生成ID,记录 ...

最新文章

  1. 南大计算机学硕复试,2019南大CS考研复试笔试回忆
  2. 你还在等着用户反馈BUG?
  3. c语言编写atm取款功能_21行C语言代码编写一个具备加密功能的聊天程序!网友:666...
  4. CPA、CPS、CPM、CPT、CPC 是什么
  5. 六年级下册计算机电子板报教案,小学信息技术闽教版四年级下册第6课 制作电子板报教案设计...
  6. ITK:计算网格的平面参数化
  7. 09_分类算法--k近邻算法(KNN)、案例、欧氏距离、k-近邻算法API、KNeighborsClassifier、及其里面的案例(网络资料+学习资料整理笔记)
  8. MVC阻止用户注入JavaScript代码或者Html标记
  9. php strchr 截断,PHP strchr() 函数
  10. Flutter NestedScrollView实现的一个经典滑动折叠头部图片的效果
  11. arm+linux+entry.s,linux kernel 之底层中断机制entry_armv.S
  12. cen7布署mysql数据库
  13. 深入理解SYN***.+防范思想及ROS设置
  14. WP7 剪贴板 Clipboard
  15. 64位计算机安装xp,Windows XP(64位)如何安装语言包
  16. Python爬虫-bug处理办法(持续更新)
  17. Django - installing mysqlclient error: mysqlclient 1.4.0 or newer is required; you have 0.9.3
  18. 大厂秋招~华为荣耀字节腾讯美团滴滴
  19. Deepin搭建Qt5开发环境
  20. 1bit和1byte_1字节=8bit bit到底是什么?

热门文章

  1. 裸奔的智能插座:博联Broadlink SP2/SP mini的分析、破解
  2. WinEdit 的algorithm2e包自定义一个带竖线的模块代码
  3. Image Pro Plus6进行荧光分析与荧光照片合成学习笔记
  4. java tetris_Java | Tetris
  5. ## 编写一个从1到150的循环,并在每行打印一个值,另外在每个3的倍数行打印“foo“,在5的倍数行打印“biz“,在10的倍数行打印“baz“;
  6. 推荐学习-Linux性能优化实战
  7. 计算机学院举办 温暖冬日 感恩社会 活动,温暖冬日 感恩社会 计算机学院举办冬季送温暖活动...
  8. 易企秀怎么转换成html5,易企秀怎么免费制作h5?
  9. C++MYSQL:获取表结构:MYSQL_FEILD
  10. base64格式转为二进制流