如果程序向oracle表中插入百万条数据怎么办呢

解决方案 »

  1.   

    用 batchExecute,只要没有BLOB这种大对象字段,每秒10万条以上很轻松。
      

  2.   

    。。简单的样例就是:PreparedStatement stmt = conn.prepareStatement("INSERT INTO Users VALUES(?,?,?)");
    User[ ] users = ...;
    for(int i=0; i<users.length; i++) {
      stmt.setInt(1, users[i].getName());
      stmt.setInt(2, users[i].getAge());
      stmt.setInt(3, users[i].getShape());
      stmt.addBatch();
    }
    int[ ] counts = stmt.executeBatch();
      

  3.   

    也不复杂,参见这里:http://oss.org.cn/ossdocs/framework/hibernate/reference-v3_zh-cn/batch.html
      

  4.   


    估计服务器很强大。楼主,你若用hibernate,则可以配置batch-size,最好给范围2-10
      

  5.   


    batch-size 小了点,至少给个千级别的。关于速度,这里有人做过测试:
    http://blog.csdn.net/hn1232/article/details/4341111MySQL:1,000,000 条(百万)消耗 272,219毫秒(4分32秒);
      

  6.   


    batch-size对性能有很大影响的。
      

  7.   

    用jdbc的api批量提交吧,通过hibernate获得session,速度很快滴
    Session s = commonDao.getSession();Connection conn= s.connection(); 

    String sql = "insert into "+tablename+"(id) values(?)";PreparedStatement prest = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);   

    BufferedReader br = new BufferedReader(new FileReader(file));
    String line =""; while((line = br.readLine())!=null ){
    prest.setString(1, line.trim());   
        prest.addBatch(); 
    } br.close();
    prest.executeBatch();   
    prest.close();
    conn.close();