这是一个如何做的例子。
以下脚本在数据库中设置表,类型和存储过程。该过程采用数组类型的参数,并将数组的每一行插入表中:
CREATE TABLE strings (s VARCHAr(4000));CREATE TYPE t_varchar2_array AS TABLE OF VARCHAr2(4000);/CREATE OR REPLACE PROCEDURE p_array_test( p_strings t_varchar2_array)ASBEGIN FOR i IN 1..p_strings.COUNT LOOP INSERT INTO strings (s) VALUES (p_strings(i)); END LOOP;END;/
然后,Java代码演示如何将数组传递到此存储过程中:
import java.sql.*;import oracle.jdbc.*;import oracle.sql.*;public class ArrayTest { public static void main(String[] args) throws Exception { DriverManager.registerDriver(new OracleDriver()); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "user", "pass"); CallableStatement stmt = conn.prepareCall("BEGIN p_array_test(?); END;"); // The first parameter here should be the name of the array type. // It's been capitalised here since I created it without using // double quotes. ArrayDescriptor arrDesc = ArrayDescriptor.createDescriptor("T_VARCHAR2_ARRAY", conn); String[] data = { "one", "two", "three" }; Array array = new ARRAY(arrDesc, conn, data); stmt.setArray(1, array); stmt.execute(); conn.commit(); conn.close(); }}
如果先运行SQL脚本,然后运行Java类,然后查询表
strings,则应该发现所有数据都已插入到表中。
当您说“一个字符数组”时,我猜测您的意思是一个Java数组
char。如果我猜对了,那么我认为您最好将
chars
转换为
Strings,然后使用与上述相同的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)