关于oracle数据库插入数据的问题分析

当初工作的时候,需要大量的手机号,移动、联通、电信的都有,应该是整个省的电话号了,只要旅游漫游到一个地方,就发当地的特色信息,应该是这么个业务。当时的问题就是怎么处理好这些电话号,1个小时更新一次,数据量绝对刺激。每次处理10个文件,每个文件20mb左右,录入都是个问题。最后我采用了这个办法解决了问题。

通过当时的工作让我明白的问题就好交给数据库去做。

create or replace type v_varchar is table of nvarchar2(15);  
  
create or replace procedure inssell(  
v_charging in v_varchar,  
v_address_local in v_varchar,  
v_address_remote in v_varchar)  
as  
 i integer;  
begin  
 for i in 1..v_charging.count loop  
   insert into dx_mms_areainfo (id,charging,address_local,address_remote) values(seq_mms_areainfo.nextval,v_charging(i),v_address_local(i),v_address_remote(i));  
 end loop;  
 delete from dx_mms_areainfo m where m.rowid > (select min(t.rowid) from dx_mms_areainfo t where m.charging=t.charging);  
end inssell;  

以上是数据库的存储过程,很简单,循环插入数据到一个临时表中,然后和用户表比较,看看用户现在的状态,是不是已经回来本地了。然后删除临时表中的数据。(时间久远记不住了)

然后java代码

public void insertintoareainfo(list list) throws instantiationexception, illegalaccessexception, classnotfoundexception, sqlexception{  
        getconn getconn = new getconn();  
        connection con = getconn.getconn();  
        oracle.sql.arraydescriptor a_id = null;  
        oracle.sql.arraydescriptor a_ticketid = null;  
        oracle.sql.arraydescriptor a_name = null;  
        oracle.sql.arraydescriptor a_age = null;  
        object[] s_id = new object[list.size()];  
        object[] s_ticketid = new object[list.size()];  
        object[] s_name = new object[list.size()];  
        for (int i = 0; i < list.size(); i++) {  
            numberaddress num = (numberaddress) list.get(i);  
            s_id[i] = new string(num.getnumphone());  
            s_ticketid[i]=new string(num.getnumbelong());  
            s_name[i]=new string(num.getnumroam());  
        }  
        try {  
            oracle.sql.arraydescriptor a_nvarchar =arraydescriptor.createdescriptor("v_varchar", con);//一定要大写  
            array id_test = new array(a_nvarchar, con, s_id);  
            array ticketid_test = new array(a_nvarchar, con, s_ticketid);  
            array name_test = new array(a_nvarchar, con, s_name);  
            callablestatement cstmt = con.preparecall("{call inssell(?,?,?)}");  
            cstmt.setarray(1, id_test);  
            cstmt.setarray(2, ticketid_test);  
            cstmt.setarray(3, name_test);  
            cstmt.execute();  
            con.commit();  
              
        } catch (exception e) {  
            e.printstacktrace();  
            system.out.println("insert into db error: " + e.getmessage());  
        }  
    }  
(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐