jdbc批量(bulk )insert———oracle数组类型与forall的应用
来源:互联网 发布:mac上mysql客户端 编辑:程序博客网 时间:2024/05/26 19:17
该贴转自如下页面,原标题为“oracle bulk Insert 比insert 快不是一点啊.”
http://blog.itpub.net/post/37572/465011
测试java的insert 同bulk Insert (9i以上) 的速度.
测试结果: bulk Insert 速度相当的快.
100000条记录
insert ,---------------93秒
bulk insert -------------0.441秒
环境:
oracle 10.2.0.3 Windows 2000Server
SQL> desc a
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
ID INTEGER Y
NAME VARCHAR2(20) Y
bulk 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)
as
c integer;
begin
forall 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;
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();
cstmt.execute();
oraCon.commit();
System.out.println(System.currentTimeMillis()-aaaa);
} catch (Exception e) {
e.printStackTrace();
}
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String args[]) {
testOracle a = new testOracle();
}
private void jbInit() throws Exception {
}
};
- jdbc批量(bulk )insert———oracle数组类型与forall的应用
- jdbc批量(bulk )insert———oracle数组类型与forall的应用
- ORACLE 批量绑定 FORALL 与 BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT
- ORACLE批量绑定FORALL与BULK COLLECT【转】
- Oracle数据库的批量操作,forall,BULK COLLECT
- Oracle Forall 与BULK COLLECT
- oracle批量DML(bulk connect into & forall)
- 批量执行 bulk collect与forall用法
- Oracle 的 bulk collect用法——批量查询
- Oracle 的 bulk collect用法——批量增删改
- SAP学习笔记(SD的基本流程)
- 使用buildroot来编译文件系统
- android中使用socket下载服务器端的安装包并自动安装
- 深入理解Java:内省(Introspector)
- DHL接口—数据交互
- jdbc批量(bulk )insert———oracle数组类型与forall的应用
- iOS如何隐藏状态栏,包括网络标志、时间标志、电池标志等
- 使用PL/SQL 设置登陆数据库的 配置文件 tnsnames.ora(oracle文件)
- SAP学习笔记(MM的库存管理)
- nutch v1.9源码分析(5)——generator分析
- css 文本两端对齐
- CGI和BOA使用期间遇到的问题汇总
- 【2015-1-15】STM32学习之库目录、文件简介
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)