一、准备工作

建表

CREATE TABLE TEMP_20200210

(

DMC VARCHAR2(100);

)

用程序拼接如下的批量插入的SQL

INSERT INTO TEMP_20200210 (DMC)

SELECT CD.* FROM

(

SELECT 1234567 FROM DUAL UNION

SELECT 1234568 FROM DUAL UNION

SELECT 1234568 FROM DUAL

) CD

在C盘文件夹下放一个1.txt文件目录为C:\1.TXT 里面的内容如下。里面有大约150万行数据,36M左右

二、实践

直接上代码,需要引入oracle的包。

package connect;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class oracle {

//数据库连接对象

private static Connection conn = null;

private static String driver = "oracle.jdbc.driver.OracleDriver"; //驱动

private static String url = "jdbc:oracle:thin:@//ip:1521/orcl"; //连接字符串 ip替换成实际ip地址

private static String username = "globalb"; //用户名

private static String password = "globalb"; //密码

// 获得连接对象

private static synchronized Connection getConn(){

if(conn == null){

try {

Class.forName(driver);

conn = DriverManager.getConnection(url, username, password);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}catch (SQLException e) {

e.printStackTrace();

}

}

return conn;

}

//执行查询语句

public void query(String sql, boolean isSelect) throws SQLException{

PreparedStatement pstmt;

try {

pstmt = getConn().prepareStatement(sql);

//建立一个结果集,用来保存查询出来的结果

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

String name = rs.getString("DMC");

System.out.println(name);

}

rs.close();

pstmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

public void query(String sql) throws SQLException{

PreparedStatement pstmt;

pstmt = getConn().prepareStatement(sql);

pstmt.execute();

pstmt.close();

}

//关闭连接

public void close(){

try {

getConn().close();

} catch (SQLException e) {

e.printStackTrace();

}

}

//执行查询语句

public static void insert(List list) throws SQLException{

Statement pstmt;

String sql ="INSERT INTO IPAM.TEMP_20200210 (DMC) SELECT CD.* FROM ("; //SELECT 1234567 FROM DUAL UNION

for(int i= 0;i

sql = sql+"SELECT "+list.get(i)+" FROM DUAL UNION ";

}

sql = sql.substring(0, sql.length()-6);

sql=sql+")CD";

//System.out.println(sql);

try {

pstmt = getConn().createStatement();

//建立一个结果集,用来保存查询出来的结果

pstmt.executeQuery(sql);

pstmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws SQLException, IOException{

Long a = System.currentTimeMillis();

FileReader fileReader =new FileReader("C:\\1.txt");

BufferedReader bufferedReader =new BufferedReader(fileReader);

StringBuilder stringBuilder =new StringBuilder();

List strings =new ArrayList<>();

String str=null;

while ((str=bufferedReader.readLine())!=null) {

//System.out.println(str);

if (str.trim().length()>2) {

strings.add(str);

}

}

System.out.println("total:"+strings.size());

List l = strings;

if(l.size()>0){

if(l.size()<=2000){//每次只插入2000条数据,ORACLE插入字符串不能大于32k

insert(l);

}else{

int times = (int)Math.ceil(l.size()/2000.0 );

for(int i=0; i

insert(l.subList(i*2000, Math.min((i+1)*2000, l.size())));

System.out.println("执行第"+(i+1)+"次");

}

}

}

Long b = System.currentTimeMillis();

System.out.println("耗时:"+(b-a)+"ms");

}

}

三、运行结果

282秒大约4.7分钟左右。

四、总结

以上工作的数据库环境为oracle11g rac ,java版本为java8。

操作系统为windows 2012R2 。

中心思想为分段批量插入,核心代码是网上找的,原文是使用mybatis批量向oracle中插入数据。

if(l.size()>0){

if(l.size()<=2000){//每次只插入2000条数据,ORACLE插入字符串不能大于32k

insert(l);

}else{

int times = (int)Math.ceil(l.size()/2000.0 );

for(int i=0; i

insert(l.subList(i*2000, Math.min((i+1)*2000, l.size())));

}

}

}

当然也可以扩展为插入多列数据,只需要修改读数据的地方和插入的SQL即可。

原文:https://www.cnblogs.com/CryOnMyShoulder/p/12294102.html

oracle11g批量insert多条,Oracle高效批量插入数据相关推荐

  1. oracle中如何加字母,Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字...

    本文主要向大家介绍了Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle 语句中" ...

  2. oracle自增插入数据,oracle实现插入数据时主键自增

    在看ORACLE_PL/SQL实例精解的时候用到了student表,需要自己创建. 1  首先是建表语句 create table student ( student_id number(8) not ...

  3. hibernate+oracle+servlet实现插入数据的时候,不立马显示!!

    尊重原创!!! 开发软件:myeclipse 10+oracle 11g 开发项目:租房系统 开发人员:1111 出现的问题:在前台发布房屋信息的界面插入数据时,自动跳转到查询所有房屋信息的页面,数据 ...

  4. insert exec 语句不能嵌套_MySQL ------ 插入数据(INSERT和insert select)(二十)

    数据插入(INSERT): 用来插入(或添加)行到数据表中.也可利用mysql 的安全机制机制使用insert 语句 可使用的四种方式:插入完整的行,插入行的一部分,插入多行和插入某些查询结果 一.插 ...

  5. oracle有条件插入数据,Oracle有条件地插入数据

    方法一: declare iExists int; begin select count(*) into iExists from表 where 条件; if iExists=0 then inser ...

  6. Mysql命令insert into:向表中插入数据(记录)

    insert into命令用于向表中插入数据. insert into命令格式:insert into <表名> [(<字段名1>[,..<字段名n > ])] v ...

  7. oracle插入后查不到,Oracle表刚插入数据,但是在MyEclipse中却查不到(代码完全正确)...

    最近在做项目的时候发现了一个有趣的问题: 在plsqldeveloper中打开一个sql会话窗口,然后 插入一条数据(或者删.改操作),但是在MyEclipse中用代码却查询不到,而且数据已经插入进去 ...

  8. 初识Mysql(part12)--我需要知道的3条Mysql语句之插入数据

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:INSERT INTO子句 此Blog里的例子都会用下面的grouping表和grouping2表. ...

  9. 5 批量更新多条记录_批量更新现有记录的默认表格方法

    根据小伙伴提示,我们可以使用CSV导入的方式,更新现有记录的默认表格. l 首先,我们要准备一个CSV文件,文件里只需要"记录的内部标识"信息即可. l 然后在CSV导入的时候,在 ...

  10. oracle怎么批量执行tdl文件,ORACLE no1 存储过程插入更新表数据

    CREATE OR REPLACE PROCEDURE sp_cust_main_data_yx(InStrDate  IN VARCHAR2, OS_ERR_MSG OUT VARCHAR2) AS ...

最新文章

  1. .Net上下文Context  学习记录
  2. 移动APP开发中8大安全问题
  3. mysql 过程 的函数的区别是什么意思_Mysql中存储过程和函数的区别是什么
  4. 计算机用户名密码策略,设置域用户帐户密码策略
  5. 腾讯觅影:AI+医疗不光能诊断癌症,还可以很公益
  6. python socket能做什么_[python]初探socket
  7. 计算机考试400,400作文:电脑考试
  8. docker更新容器命令 ,自启
  9. 服务器配置 | 3306端口被占用,phpStudy无法启动Apache
  10. 7-Flink的分布式缓存
  11. vue 项目 upload上传图片 并实现拖拽排序
  12. html日期控件默认设置为当天日期,以及获取当前日期前的指定天数
  13. html chm用浏览器打开,解决chm文件无法使用浏览器打开的问题
  14. python获取工作目录路径为C:\Users\用户名\AppData\Local\Temp...解决方案
  15. BFS解小孩分油问题
  16. 40行代码的Python爬虫案例:虎牙-王者荣耀主播的人气排行
  17. 你的登录接口真的安全吗?
  18. HC32L130基于Xmodem协议实现IAP串口在线升级
  19. 三角定位matlab,基于RSSI校正的三角形质心定位算法
  20. WoShop跨境电商USDT支付语言插件全开源无加密商城源码

热门文章

  1. 金融银行软件测试超大型攻略,最受欢迎的金融银行大揭秘附面试题
  2. 从视频马赛克看编码量化参数对流控的作用
  3. Docker——网络
  4. 修补计算机漏洞重启,win7系统出现严重的系统漏洞如何修复
  5. 游戏CG音效制作技巧
  6. 【20保研】天津大学智能与计算学部2020级研究生招生夏令营活动通知
  7. Adobe Flash Player已不再受支持 解决方案
  8. 编程序,输入年份和月份,输出本月有多少天。合理选择分支语句完成设计任务。
  9. SpringCloud2.0版本入门 | 服务链路追踪(Spring Cloud Sleuth)简单入门
  10. JDBC的五种连接方式