我现在想写一个存储过程
插入数据库用的,表结构如下:ID NUMBER
CHARGING  VARCHAR2(15)
ADDRESS_LOCAL VARCHAR2(10)
ADDRESS_REMOTE VARCHAR2(10)我现在需要解析一个50MB以上的数据,然后将解析后的数据插入数据库,去重复后保留,问题是数据量很大,而我现在的做法写入很慢,请高手指点,我想用存储过程写,但是又不知道存储过程能不能接受List的参数。
public void insertintoareainfo(List list) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
GetConn getConn = new GetConn();
Connection con = getConn.getConn();
Statement st = con.createStatement();
for(int i = 0 ; i < list.size();i++){
NumberAddress num = (NumberAddress) list.get(i);
String sql = "INSERT INTO DX_MMS_AREAINFO (ID,CHARGING,ADDRESS_LOCAL,ADDRESS_REMOTE) VALUES(SEQ_MMS_AREAINFO.NEXTVAL,'"+num.getNumPhone()+"','"+num.getNumBelong()+"','"+num.getNumRoam()+"')";
st.addBatch(sql);
}
int[] rs = st.executeBatch();
System.out.println("共处理"+rs.length+"条");
st.close();
getConn.closed(con);
}小弟现在求一个高效的存储过程,插入时间越短越好。在线等

解决方案 »

  1.   

    貌似批处理的话   preparedstatement  更快,statement每次都会生成执行计划,很耗资源和时间
      

  2.   

    如果你的数据是很规律的分割用sqllodar比较高效例如:假如你的文件每条记录用"|"分割的话,可以这样写
    load data
    infile 'card126.txt' 
    into table prescardvcinfo Append 
    TRAILING NULLCOLS
    (
    cardno char terminated by '|',
    price char terminated by '|',
    startdate char terminated by '|',
    enddate char terminated by '|',
    chargedateandtime char terminated by '|',
    additionalday char terminated by '|',
    chargemanner char terminated by '|',
    chargephonenumber char terminated by '|',
    flag char terminated by '|',
    retailercode char  terminated by '|'
    )
      

  3.   

    解决了:
    用存储过程就可以,速度很快50W的数据瞬间就搞定,哈哈。开心,oracle强大、威武啊,当然也感谢大家帮忙,嘎嘎。
      

  4.   

    是写好存储过程,然后java来调用么