Javaはoracleに百万データ(大量データ)を挿入し、5秒未満!

1507 ワード

JAvaが持参した一括操作で、大量のデータの処理をうまくサポートできます.c#よりずっと簡単です.c#oracleが提供するODP.NETを使用するには、効率が高いが、コードは複雑である.要するに、この方面では、c#は比べものにならない.もちろん、ここのテーブルはインデックスを付けていないので、インデックスを付けると効率が遅くなりますが、やはり効率的です.
long startTime=System.currentTimeMillis();
       
        Connection conn=null;
        try{
            conn=getConnection();
            conn.setAutoCommit(false);
           
            PreparedStatement stmt=conn.prepareStatement("INSERT INTO product_tmp VALUES (?,?,?,?)");
            System.out.println("    :"+datas.size());        //1000000

            int num=0;
            for(Values v:datas){
                num++;
                stmt.setInt(1, v.getId());
                stmt.setString(2, v.getStr1());
                stmt.setString(3, v.getStr2());
                stmt.setString(4, v.getStr3());
                stmt.addBatch();
                //  :  5 ,    ;             ,      ,6 5000   
               // ,6 6000     ,        。
                if(num>50000){
                    stmt.executeBatch();
                    conn.commit();
                    num=0;
                }
            }
            stmt.executeBatch();
            conn.commit();
        }catch(Exception e){
            conn.rollback();
            e.printStackTrace();
        }finally{
            closeConnection(conn);
            long endTime=System.currentTimeMillis();
            System.out.println("      :"+(endTime-startTime)+"ms");
        }