存储过程有个out的参数,类型是table,怎样用java获取啊?
我用registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY,"table的名字");也不行。。
table是全局的也不行,放在package也不行求代码。。
我用registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY,"table的名字");也不行。。
table是全局的也不行,放在package也不行求代码。。
http://blog.csdn.net/east271536394/article/details/5643371
# /*********************************
# *Create proc demo_proc
# @inparam1 int ,
# @inparam2 varchar(20),
# @inparam3 varchar(20),
# @inparam4 varchar(50)
# AS
# insert into test values(@inparam1,@inparam2,@inparam3,@inparam4)
# *存储过程
# *表
# * create table test(
# * [id] int,
# * [name] varchar(20),
# * age varchar(20),
# * address varchar(50)
# * )
# *
# **********************************/
# import java.sql.*;
# /**
# *author:East(张栋芳)
# *date:2008-6-16
# */
# public class StoreTest{
# private static Connection con=null;
# static String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=pubs";
# public Connection getConn(){
# System.out.println("aaaaaaaaaaaa");
# try{
# Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
# con=DriverManager.getConnection(url,"sa","");
# }catch(ClassNotFoundException e){
# e.printStackTrace();
# }catch(SQLException se){
# se.printStackTrace();
# }
# return con;
# }
# public void doStore() throws Exception{
# String strSQL="{call demo_proc(?,?,?,?)}";
# CallableStatement sqlStmt = getConn().prepareCall(strSQL);
# sqlStmt.setInt(1,1);
# sqlStmt.setString(2,"张栋芳");
# sqlStmt.setString(3,"20");
# sqlStmt.setString(4,"湖南永州");
# int i=sqlStmt.executeUpdate();
# System.out.println ("bbbbbbbbbbb");
# }
#
# public static void main(String [] args)throws Exception{
# StoreTest test = new StoreTest();
# test.doStore();
# }
# }
ArrayDescriptor array2Tab = ArrayDescriptor.createDescriptor("你的嵌套table名",conn);
ARRAY vArray = new ARRAY(array2Tab , conn, arr);//arr是你的java种的数组
cs.registerOutParameter(2, OracleTypes.CURSOR);// 接收,返回对象是个ResultSet
ResultSet rs=(ResultSet)cs.getObject(params.length);
你在设计编写存储过程的时候,就没有想过返回table类型会造成后续的问题么?比如:现在就不知道怎么取数据了。。LZ还是设计的问题。。
换其他的输出类型不行么。。返回查询结果。。
String procedure = "{ call PageGetTemp(?, ?) }";
CallableStatement cstmt;
cstmt = con.prepareCall(procedure);
cstmt.setInt(1, pageSize);
cstmt.setInt(2, pageNumber);
ResultSet rs = cstmt.executeQuery();
if(!Utils.isNull(rs)){
while(rs.next()){
String phone = rs.getString(1);
list.add(phone);
}
}这样就能直接取了。。上述代码中phone也是列表数据。。