读书人

[转]jdbc批量insertoracle数组类

发布时间: 2012-07-03 13:37:42 作者: rapoo

[转]jdbc批量insert———oracle数组类型与forall的应用

原文:http://blog.itpub.net/post/37572/465011

测试java的insert 同使用9i以后的bulk Insert 的速度.
测试结果显示通过bulk Insert 速度相当的快.
100000条记录
insert ,---------------93秒
bulk insert -------------0.441秒

环境:
oracle 10.2.0.3 Windows 2000Server?
java


代码:

?

SQL> desc aName Type Nullable Default Comments ---- ------------ -------- ------- -------- ID INTEGER Y NAME VARCHAR2(20) Ybulk Insert 使用的类型及过程create or replace type i_table is table of number(10);create or replace type v_table is table of varchar2(10);create or replace procedure pro_forall_insert(v_1 i_table,v_2 v_table)asc integer;beginforall i in 1.. v_1.count insert into a values(v_1(i),v_2(i));end;
?

?

测试的java代码:

import java.io.*;import java.sql.*;import java.util.*;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.*;import oracle.jdbc.OracleTypes;import oracle.sql.*;import oracle.sql.ARRAY;import oracle.sql.ArrayDescriptor;import oracle.sql.STRUCT;import oracle.sql.StructDescriptor;import java.sql.Connection;import java.sql.DriverManager;import oracle.jdbc.OracleCallableStatement;public class testOracle{    public testOracle()    {        Connection oraCon = null;        PreparedStatement ps = null;        Statement st = null;        ResultSet rs = null;        try        {            try            {                Class.forName("oracle.jdbc.driver.OracleDriver");            }            catch (ClassNotFoundException ex)            {            }            oraCon = DriverManager.getConnection("jdbc:oracle:thin:@192.168.15.234:1521:ora10g",                    "imcs",                    "imcs");            oraCon.setAutoCommit(false);        }        catch (SQLException ex)        {            ex.printStackTrace();        }        CallableStatement cstmt = null;        oracle.sql.ArrayDescriptor a = null;        oracle.sql.ArrayDescriptor b = null;        if (1 == 1)        {            Object[] s1 = new Object[100000];            Object[] s2 = new Object[100000];            for (int i = 0; i < 100000; i++)            {                s1[i] = new Integer(1);                s2[i] = new String("aaa").concat(String.valueOf(i));            }            try            {                a = oracle.sql.ArrayDescriptor.createDescriptor("I_TABLE",                        oraCon);                b = oracle.sql.ArrayDescriptor.createDescriptor("V_TABLE",                        oraCon);                ARRAY a_test = new ARRAY(a, oraCon, s1);                ARRAY b_test = new ARRAY(b, oraCon, s2);                cstmt = oraCon.prepareCall("{ call pro_forall_insert(?,?) }");                cstmt.setObject(1, a_test);                cstmt.setObject(2, b_test);                long aaaa = System.currentTimeMillis();                System.out.println(System.currentTimeMillis());                cstmt.execute();                oraCon.commit();                System.out.println(System.currentTimeMillis() - aaaa);            }            catch (Exception e)            {                e.printStackTrace();            }        }        else        {            try            {                PreparedStatement oraPs = null;                String oraInsertSql = "insert into a values(?,?)";                oraPs = oraCon.prepareStatement(oraInsertSql);                long aaaa = System.currentTimeMillis();                System.out.println(System.currentTimeMillis());                for (int i = 0; i < 100000; i++)                {                    oraPs.setInt(1, i);                    oraPs.setString(2,                            new String("aaa").concat(String.valueOf(i)));                    oraPs.executeUpdate();                }                oraCon.commit();                System.out.println(System.currentTimeMillis() - aaaa);            }            catch (SQLException ex)            {                System.out.print("dddddd");                System.out.print(ex.getMessage());            }        }        try        {            jbInit();        }        catch (Exception ex)        {            ex.printStackTrace();        }    }        public static void main(String args[])    {        testOracle a = new testOracle();    }        private void jbInit() throws Exception    {    }    };
?

?

读书人网 >其他数据库

热点推荐