zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Redis(二)
    Redis(一)
    MyBatis--一级二级缓存
    MySQL优化
    HashMap
    ArrayList
    常用框架注解说明
    Linux常用基础命令
    SpringCloud--gateway路由配置
    JetBrains系列软件的插件安装
  • 原文地址:https://www.cnblogs.com/dongqiSilent/p/3863524.html
Copyright © 2011-2022 走看看