日期:2014-05-20  浏览次数:20751 次

jdbc调用存储过程的问题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
存储过程有个out的参数,类型是table,怎样用java获取啊?
我用registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY,"table的名字");也不行。。
table是全局的也不行,放在package也不行。。。

求代码。。

------解决方案--------------------
百度吧,这个问题很多回答
------解决方案--------------------
可以看看这文章
http://blog.csdn.net/east271536394/article/details/5643371

Java code

# /********************************* 
#  *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();   
#     }  
# }

------解决方案--------------------
Java code

ArrayDescriptor array2Tab = ArrayDescriptor.createDescriptor("你的嵌套table名",conn);
ARRAY vArray = new ARRAY(array2Tab , conn, arr);//arr是你的java种的数组

------解决方案--------------------
哦,看成In参数了,out参数你registerOutParameter然后getArray不行吗,可以把嵌套表换成VARRAY试一下

------解决方案--------------------
晕死,它返回的是一个“Table”,也就是一个游标呀。

Java code


// 注册输出参数应该是个游标
cs.registerOutParameter(2, OracleTypes.CURSOR);

// 接收,返回对象是个ResultSet
ResultSet rs=(ResultSet)cs.getObject(params.length);