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 ...
随机推荐
- c# 后台AJAX
public class BackA { #region 后台 AJAX public static string GetPage(string posturl) { Stream outstream ...
- [Unity动画]01.HasExitTime & ApplyRootMotion
参考链接: https://www.cnblogs.com/hammerc/p/4828774.html 资源下载: https://assetstore.unity.com/packages/ess ...
- 文件查重工具 ultraCompare 和 UltraFinder 用法
UltraCompare 是一款文件内容比较工具,它可以对于文本.文件夹.二进制进行比较.可进行文本模式,文件夹模式以及二进制模式的比较,可对比较的文件.文件夹等进行合并,同步等操作.是进行比较操作的 ...
- windows下mvn verify异常
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jarsigner-plugin:1.4:sign (sign) on pr ...
- tkinter获取键盘输入
tkinter获取键盘输入
- python3基础:基本语句(2017)
http://www.cnblogs.com/qq21270/p/4591318.html 字符串.文本文件 http://www.cnblogs.com/qq21270/p/7872824.htm ...
- 代码: html 页面小效果 (集合,待补充)
标签切换(下部内容区跟着切换): 2016-6-2 <script type="text/javascript" src="http://cdn.bootcss.c ...
- ClientAbortException: java.net.SocketException: 断开的管道
这次终于解决了 ClientAbortException ! [ERROR] [- ::] net.jweb.actions.CommonDiskAction - 系统异常 ClientAbortEx ...
- spark读取文本数据测试
已知文本有三列,整理数据,并导入mysql scala> import org.apache.spark.sql.SQLContextimport org.apache.spark.sql.SQ ...
- RDD的分区相关
分区是rdd的一个属性,每个分区是一个迭代器 分区器是决定数据数据如何分区 RDD划分成许多分区分布到集群的节点上,分区的多少涉及对这个RDD进行并行计算的粒度.用户可以获取分区数和设置分区数目,默认 ...