Java大批量数据导入到Oracle…

本文介绍了一种使用JDBC批处理操作进行大批量数据快速导入的方法,通过禁用自动提交并批量执行SQL插入语句,显著提高了数据导入效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近来在做一些大批量数量导入数据库的操作,学习了一种简单的方式,与大家分享交流:

 

http://saluya.iteye.com/blog/1420821查看MyEclipse内存的,大家参见一下。

 

我是利用JDBC自己的Batch操作来控制 插入条数  ,然后实现大批量快速导入数据:

 

下面是普通插入方式:

public boolean insert(Code c) {
       Stringsql = "insert into testCode values(?,?)";
      conn = ConnectionUtil.getConnection();
      try {
         psmt = conn.prepareStatement(sql);
          psmt.setString(1,c.getAcaCode());
         psmt.setString(2, c.getRefCode());
    int a =psmt.executeUpdate();
   if(a==1){
    return true;
    }
  } catch (SQLException e){
   e.printStackTrace();
  }finally{
   try {
    psmt.close();
    conn.close();
   } catch(SQLException e) {
    e.printStackTrace();
   }
  }
  return false;
 }

 

这种方式,插入数据库不超过1000条还好,但是如果数据量超过100万,就不行了,几个小时可能都没执行完成,所以下面的方式将超乎想象的缩短时间:

     public boolean insert1(String[] arr1,String[]arr2) {
  String sql = "insert intotestCode values(?,?)";
  conn =ConnectionUtil.getConnection();
  try {
    conn.setAutoCommit(false);
   psmt = conn.prepareStatement(sql);
    for(int i = 0;i
    psmt.setString(1, arr1[i]);
    psmt.setString(2, arr2[i]);
    psmt.addBatch();
    if(i00==0||i==arr1.length-1){
     psmt.executeBatch();
     conn.commit();
    }
   }
   return true;
  } catch (SQLException e){
   try {
    conn.rollback();
   } catch(SQLException e1) {
    //TODO Auto-generated catch block
    e1.printStackTrace();
   }
   e.printStackTrace();
  }finally{
   try {
    if(psmt!=null){
     psmt.close();
    }
    if(conn!=null){
     conn.close();
    }
   } catch(SQLException e) {
    e.printStackTrace();
   }
  }
  return false;
 }

        其中,i模的数可以自定义,在网上很多地方说100左右,但是我试验的时候,1000才最好,不过可能由于各种机器、环境等因素影响,大家可以试试,差不多就行了;

        这种方式在我电脑上运行8秒左右,就把100万条记录轻轻松松插入到数据库中了,不过是两个14位的varchar2字段,不是很多,占用32兆的数据库空间。时间与字段多少也有关系的...

 

       另外,我的这种方式基于可以容纳这样的数组,或者说是对象,很多人的MyEclipse容纳不了100万个数据存储在JVM内存中,所以这时可以扩展JVM内存,扩展方式,网上很容易找,就不介绍了...

 

        如有不当之处,欢迎指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值