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

原文地址:https://www.cnblogs.com/dongqiSilent/p/3863524.html