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 ...
随机推荐
- Js中,Map对象的使用
1.定义 键/值对的集合. 2.语法 mapObj = new Map() 3.备注 集合中的键和值可以是任何类型.如果使用现有密钥向集合添加值,则新值会替换旧值. 4.属性 构造函数 :指定创建映射 ...
- CentOS7开机时的菜单选项及时间的修改
一.在CentOS更新后,并不会自动删除旧内核.所以在启动选项中会有多个内核选项,可以手动使用以下命令删除多余的内核:(正常下,第一个选项正常启动,第二个选项急救模式启动(系统出项问题不能正常启动时使 ...
- 【Linux】使用ZStack私有云创建本地Linux服务器
1.运维配置了一台Linux的主机,然后安装了ZStack,前面这部分操作运维处理了. 2.首先打开Zstack的网址地址,一般是一个IP地址(此时不写) 3.然后进入页面后,默认进入首页,此时可以按 ...
- hadoop2.4集群的搭建
hadoop中的三大组件: hdfs:分布式文件管理系统 (namenode管理所有的datanode) yarn:资源调度系统(ResourceManager管理所有的nodemanager) ma ...
- httpd-2.4.6
1.基础 安装: [root@tri manual]# yum install httpd-manual httpd 源码编译: configure配置选项 配置选项 默认值 备注 -prefix ...
- C#打印0到100的素数
static void Main(string[] args) { //输出1-100的素数 bool res; ; ; i < ; i++) { res = true; ; j < i; ...
- 关于微信支付接口,curl错误代码58
微信支付接口,curl错误代码58 之前的微信付款到用户零钱都是好好的,今天运营来找我, 我想了了下,就是进行了网站搬家 看了下 微信支付相关的证书配置文件 知道了,在这个 要改下证书的路径 WxPa ...
- centos7.5安装minikube kubernetes
前提:已安装centos7.5安装VirtualBox Minikube是什么?Minikube是一种方便在本地运行Kubernetes的工具. Minikube 是可以在VM中运行单节点的Kuber ...
- 登录之md5加密
语句: password = hex_md5(password); 引入js文件: md5.js: /* * A JavaScript implementation of the RSA Data S ...
- nginx 根据域名和地址跳转
设置nginx变量 set $domail_url "$host$request_uri"; 判断并重定向if ($domail_url = '123.com/about/'){ ...