免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1835 | 回复: 0
打印 上一主题 下一主题

java调用存储过程实现批量入库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-24 16:27 |只看该作者 |倒序浏览
作者:
olivenan@hotmail.com
在处理大量日志数据库入库时,为了提高速度我们经常用的策略就是批量入库,而不是单条数据提交。
为了最大程度上发挥Oracle的性能,可以考虑采用存储过程、type组合来实现批量入库。
1、创建type
CREATE OR REPLACE TYPE type_object AS OBJECT
(
  ID  NUMBER,
  DAY DATE,
  STR VARCHAR2(100)
)

CREATE OR REPLACE TYPE ARRAY_object
  AS table OF type_object
2、创建表
create table T_OBJECT
(
  ID  NUMBER,
  DAY DATE,
  STR VARCHAR2(100)
)
3、创建存储过程,收入参数就是ARRAY_object类型。
create or replace procedure p_batch_insert(i_object in array_object) is
begin
  insert into t_object
    (id, day, str)
    select id, day, str
      from the (select cast(i_object as array_object) from dual);
end p_batch_insert;
4、测试的JAVA程序
package com;
import java.sql.*;
import com.timesten.jdbc.TimesTenDataSource;
import oracle.jdbc.OraclePreparedStatement;
public class Test4 {
public static void main(String arg[]) {
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   //Class.forName("com.timesten.jdbc.TimesTenDriver");
   String url="jdbc:oracle:thin:@192.168.6.100:1521:logstat1";
  // String url = "jdbc:timesten:direct:dsn=ttdemo;uid=logstat;pwd=logstat;ORACLEID=logstat_214;OraclePWD=logstat";
   Connection con = DriverManager.getConnection(url, "logstat","logstat");
      /*TimesTenDataSource ds = new TimesTenDataSource();
    ds.setUrl(url);
    Connection con = ds.getConnection();
   */
   PreparedStatement  pstmt = null;
   //oracle.jdbc.OraclePreparedStatement pstmt = null;
  
    String sql = "{call p_batch_insert(?)}";
   
   pstmt = con.prepareCall(sql);
   //pstmt =(OraclePreparedStatement) con.prepareCall(sql);
   Object[][]  object1=new Object[100][3];
  for ( int i=0;i
}
我们也可以在存储过程中做一些其它逻辑运算,速度要提高不少。

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

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7121/showart_1090901.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP