java批量向oracle插入数据
由于项目需要,需要将一个6M的txt中的数据插入到oracle数据表中。txt中的数据是每行一个词。经过统计,词总数是505040。为了看起来方便,我将我的所有方法写在类入口中,数据库的信息我会用test代替,代码如下。
public static void main(String[] args) throws IOException, Exception {
// TODO Auto-generated method stub
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:test",
"test", "test");
conn.setAutoCommit(false);
PreparedStatement pst = conn
.prepareStatement("insert into yq_seq_word values(seq_yq_seq_word.nextval,?)");
InputStreamReader isr = new InputStreamReader(new FileInputStream(
new File("C:/Users/Press-Lab/Desktop/test.txt")), "utf-8");
BufferedReader read = new BufferedReader(isr);
String s = null;
int i = 1;
long start = System.currentTimeMillis();
while ((s = read.readLine()) != null) {
// 当数据满100条批量插入
if (i % 100 == 0) {
// 语句执行完毕,提交本事务
pst.executeBatch();
// 此处的事务回滚是必须的,网上很多代码没有处理,会导致插入数据不完整。
try {
conn.commit();
} catch (Exception e) {
conn.rollback();
}
} else {
pst.setString(1, s);
pst.addBatch();
}
System.err.println(s);
i++;
}
// 由于每次达到100条插入,如果数据不为100的倍数的话,最后一次会剩下一些。下面的代码正好处理剩下的数据
// 语句执行完毕,提交本事务
pst.executeBatch();
try {
conn.commit();
} catch (Exception e) {
conn.rollback();
}
long end = System.currentTimeMillis();
// 此处是打印插入效果
System.out.println("插入" + i + "条,耗时" + (end - start));
read.close();
}
以下是效果的打印。
插入505040条,耗时22796
java批量向oracle插入数据的更多相关文章
- Oracle 插入数据效率对比
oracle插入数据有多种方式: 将从多个表中查出来的数据插入到临时表中 数据行数 5189597 1.传统方式:直接将数据插入到表中 insert into LLB_BASIC_USER_D_TEM ...
- ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录
TP+ORACLE插入数据BUG修复以及获取自增Id支持getLastInsID方法 这些天在做Api接口时候,发现用TP操作Oracle数据库,发现查询修改删除都能执行, 但一旦执行插入操作老是报错 ...
- JDBC向oracle插入数据
public static void main(String[] args) throws SQLException { 2 3 4 String driver="oracle.jdbc.d ...
- oracle插入数据的时候报错:ORA-00928: 缺失 SELECT 关键字
比如:插入数据的时候是这样的insert into a value('哈哈'); 报的是这样的错误:ORA-00928: 缺失 SELECT 关键字 其实就是value少了一个s,在oracle中,插 ...
- C#批量向数据库插入数据
程序中,批量插入数据有两种思路. 1.用for循环,一条一条的插入,经实测,这种方式太慢了(插入一万条数据至少都需要6-7秒),因为每次插入都要打开数据库连接,执行sql,关闭连接,显然这种方式不可行 ...
- mysql存储过程批量向表插入数据
业务需要,往某个表中批量插入数据,使用存储过程插入 首先,要建立一张mysql表,表明为phone_number, 三个字段,id 自增,number 就是要插入的表格,is_used 表示十分已经使 ...
- oracle插入数据
插入数据 insert into comm_error_code_def (ID, ERR_MESSAGE, ERR_CODE, ERR_DESC, NAME, MISC_DESC, STATUS, ...
- oracle插入数据问题
这个是我的表结构:desc T_STUDENT;Name Type Nullable Default Comments ------------ ----------- ...
- oracle插入数据时解决和旧数据id的冲突
我们在使用oracle创建一个主键的时候需要让他自增, 但是他跟mysql不同,需要创建序列,具体看下面: 可以删除之前创建的sequence,我们在重新创建一个: DROP SEQUENCE SJG ...
随机推荐
- Android模块化开发、组件化开发;
模块化开发:优点嘛,项目过大时便于管理: 1.在根目录的gradle.properties文件下添加 isBuildModule=false: 使用isBuildModule来控制这个是Library ...
- ROS进阶学习手记 7 -- RViz仿真实例1
[任务2]: 用simulator: RViz 工具,完成对小车的建模,名字drive RViz = dvrv, 用 dvrv_node 发布topic和数据格式,向它发送位置指令,使它能接受 ...
- Dubbox服务demo
一.安装虚拟机,安装所需要的jdk.zookeeper并启动zookeeper,虚拟机的ip+zookeeper默认端口号2181 二.编写Service服务方 1.创建Maven项目 2.编写接口 ...
- JQuery:聚焦清空输入框值,失焦恢复默认值
本来这个小玩意很简单,不用记录到博客里,但今天是娱乐日,要快落一天,为了减轻负罪感,假装自己又学了点新东西 <!DOCTYPE html> <html> <head> ...
- 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- Redis 发布与订阅模式
subscribe 订阅 publish 发布 频道 发布内容
- mysql Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- UI5-学习篇-4-SCP-SAP WEB IDE登录
1.注册SAP账号 登录SAP官网:https://www.sap.com/index.html 注册Register 填完相关信息,勾选条款,然后提交. 账号激活:完成后需到Email邮件中激活链接 ...
- APP-8.1-百度语音应用
1.百度语音登录地址 http://yuyin.baidu.com/ 2.控制台创建应用 3.生成签名 3.1Postman软件应用 APP-8.2-Postman应用 3.2Postman执行 UR ...
- CSS内容简单总结
day50 1. 内容回顾 1. 伪类和伪元素 1. 伪类 1. :link 2. :visited 3. :hover ...