提高oracle海量数据写入效率

来源:互联网 发布:java滑动验证码源代码 编辑:程序博客网 时间:2024/06/05 03:46

以结构数组的方式,从java传递到oracle的存储过程。

一:oracle部分

1,首先在oracle中创建对应的type

CREATE OR REPLACE    TYPE     oracle用户名.TY_REG_DATAAS OBJECT
(
   name  varchar2(10),
   age    varchar2(10)
)

2,创建type实例

CREATE OR REPLACE  TYPE      oracle用户名.ARRAY_REG_DATAAS table OFTY_REG_DATA

 

3,存储过程

PROCEDURE saveInfo(arr_test_data in ARRAY_REG_DATA)
IS

begin

         if arr_test_data.COUNT !=0  then
    
                  for j in 1.. arr_kk_data.COUNT loop

                        insert into tbTest (name,age) values (arr_test_data(j).name,arr_test_data(j).age);

                 end loop;

         end if;

end;

end saveInfo;

 

二: java代码片段

public static int InsertInfo(String strInfo) throws Exception {  

             PreparedStatement cstmt=null; 

            //-------1------------oracle 存储过程-----------------------------------------------------

            String sqlProcedure = "{call  saveInfo(?)}";     

                

             //------2-----------与数据库建立连接--------------------------------------------------

            // 注:本计划使用池化的,但未能成功,从网上查了些资料,说是使用池化进行传递结构数组会有问题,无奈只能使用此方法与数据库建立连接

            String url = "jdbc:oracle:thin:@localhost:1521:orcl";                              
            Connection con = DriverManager.getConnection(url, "oracle用户名", "密码");
            cstmt = con.prepareStatement(sqlProcedure);

 

            //------3--------------创建结构数据对象-------------------------------------------------

           Object[][] objTest = null;
           oracle.sql.ArrayDescriptor arrTest = oracle.sql.ArrayDescriptor.createDescriptor("ARRAY_REG_DATA",con);
           oracle.sql.ARRAY arrayTest; 

 

             //-----4--------------传值-------------------------------------------------------------------

            for(int i=0;i<99999;i++){

                   objTest[i][0]  =   "小明";

                   objTest[i][1]  =   "10";

            }

           arrayTest = new oracle.sql.ARRAY(arrTest, con, objTest);

           cstmt.setArray(1,arrayTest);

           cstmt.execute();

}

 

 备注:如果在入库的过程中发现字符串的值没有入进去,请检查有没有加载该类库nls_charset12.jar

原创粉丝点击