一、准备工作

建表

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. JFreeChart_API
  2. 用了这个 IDE 插件,5分钟解决前后端联调!
  3. leetcode算法题--Decode String
  4. 关于x86、i386、i486、i586和i686等名词的解释
  5. 博士学位论文 | 机器阅读理解与文本问答技术研究
  6. 一篇男人必看的创业文章。(人活着不能没有钱,但是活着却不能只为了钱)...
  7. kali换源无法保存_Kali Linux 2.0更新源无法正常使用(解决)
  8. 双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer
  9. tiny core linux ftp,tinycore 的基本搭建,开机时间只需要1-3秒
  10. 腾讯回应“二选一”;微信内测更新;特斯拉车祸再致命 | CSDN极客头条
  11. 机器学习基础(十五)—— blending
  12. org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
  13. 探讨下在Delphi里面进程之间的数据共享
  14. My Feedback for Windows 10 IoT Core on Feedback Hub App (4/1/2017-1/23/2018)
  15. pygame下载(非常详细)
  16. 图论与代数结构 最短路问题
  17. 【动手学深度学习】01 Windows下安装环境
  18. 科技感html页面源码,科技感十足的403html模板动态源码
  19. 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引
  20. JPEG图像存储格式

热门文章

  1. android:ems 属性
  2. 【day13】【洛谷算法题】-P5713洛谷团队系统-刷题反思集[入门2分支结构]
  3. 设计任务调度依赖配置表
  4. 街头篮球服务器未响应,肝的飞起 《街头篮球》魔王试炼FAQ
  5. 2017 清北学堂 Day 6终极考试报告
  6. Gartner到底怎么回事?
  7. 陶哲轩实分析 习题6.3.3
  8. php微信上传图文素材,php使用curl 上传微信公共平台素材文件
  9. Blue Coat:打击移动领域的坏人
  10. 组网 三层交换机配置