日期:2014-05-17  浏览次数:20756 次

如何把一个vector的数据传给存储过程
我做了一个数据结构T,在内存区用vector<T*>存储,但是需要定时批量的把vector里的数据写入数据库,本来用可以把vector里的数据一条条写入数据库,但是可能每次都要进行IO操作,影响效率,所以用存储过程,但是不知道怎么把vector的东西转化成一个数据集作为参数传给存储过程,请教了

------解决方案--------------------
你数据从哪儿来的呢,从界面输入的?
一次输入一批数据吗?(一般界面一条一条提交的)
如果那一批数据是从数据库取的,加工之后再存入数据库的话
建议直接用存储过程加工并保存。

参考:
SQL code
SQL> desc aa
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------------
 NAME                                               VARCHAR2(10)

SQL> truncate table aa;

Table truncated.

SQL> select * from aa;

no rows selected

SQL> 

create or replace type ARR as table of VARCHAR2(200) NOT NULL;
/

create or replace procedure give_me_an_array(myArray arr)
as
begin
  forall i in myArray.first..myArray.last
  insert into aa values(myArray(i));
  COMMIT;
end;
/

import java.sql.*;
import java.util.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;

public class test
{
    public static void main(String args[]) throws Exception
    {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection conn = DriverManager.getConnection(
                 "jdbc.oracle:thin:@192.168.1.1:1521:orcl","username","password");
        String a[]={"3","2","abc"};
        ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("ARR",conn);
        ARRAY array_to_pass = new ARRAY(descriptor,conn,a);
      OraclePreparedStatement ps = (OraclePreparedStatement)conn.prepareStatement
                                           ("begin give_me_an_array(:x); end;");
      ps.setARRAY( 1, array_to_pass );
      ps.execute();
    }
}

e:javac test.java

e:java test

SQL> select * from aa;

NAME
----------
3
2
abc

3 rows selected.

------解决方案--------------------
http://topic.csdn.net/u/20100310/15/7f83d565-4406-4193-9e09-5738a98745d8.html