oracle java调用存储过程_java调用存储过程(oracle)

1.申明包(数据库)

CREATE OR REPLACE PACKAGE TESTPACKAGE  AS

TYPE Test_CURSOR IS REF CURSOR;

TYPE Test_CURSOR1 IS REF CURSOR;

end TESTPACKAGE;

2.存储过程(数据库)

CREATE OR REPLACE PROCEDURE TESTC(a1 in NUMBER,a2 in VARCHAR2,bb out VARCHAR2, cc out NUMBER ,dd out Date, p_CURSOR out TESTPACKAGE.Test_CURSOR,p_CURSOR1 out TESTPACKAGE.Test_CURSOR1) IS

BEGIN

OPEN p_CURSOR FOR SELECT * FROM MBOXSTATTEAMBLOGUSER;

OPEN p_CURSOR1 FOR SELECT * FROM MBOXMESSAGEREADER;

bb:=a2;

cc:=a1;

dd:=sysdate;

END TESTC;

3.调用存储过程的方法(java)

// 返回记录集信息

public List callProcedureGetList(MyQuery query){

Session session = getHibernateSession();

Connection conn = session.connection();

CallableStatement cstmt=null;

List rtls=new ArrayList();

try {

cstmt=conn.prepareCall(query.getQueryString());

List ls=query.getParalist();       //输入参数集合

List outls=query.getOutlist();    //输出参数集合

List outcursorls=query.getOutCursorlist(); //输出游标参数集合

for (int i=0; i < ls.size(); i++) {   //输入参数

cstmt.setObject(i+1,ls.get(i));

}

int outpos=ls.size()+1;

for (int k = 0; k < outls.size(); k++) { //输出参数

if (((Integer)outls.get(k)).intValue()==1)      //String

{

cstmt.registerOutParameter(outpos,Types.VARCHAR);

outpos++;

}

else if (((Integer)outls.get(k)).intValue()==2)  //NUMBER

{

cstmt.registerOutParameter(outpos,Types.INTEGER);

outpos++;

}else if (((Integer)outls.get(k)).intValue()==3) //DATE

{

cstmt.registerOutParameter(outpos,Types.DATE);

outpos++;

}

else

{

cstmt.registerOutParameter(outpos,Types.OTHER);

outpos++;

}

}

int outcursorpos=ls.size()+outls.size()+1;

for (int k = 0; k < outcursorls.size(); k++) {         //输出集合

cstmt.registerOutParameter(outcursorpos,oracle.jdbc.OracleTypes.CURSOR);

outcursorpos++;

}

cstmt.executeUpdate();

int begin=ls.size()+1;

for (int k = 0; k < outls.size()+outcursorls.size(); k++) {

Object object=cstmt.getObject(begin);

if ( object instanceof ResultSet)

{

object=resultSet2Map((ResultSet)object);

}

rtls.add(object);

begin++;

}

return rtls;

}catch(Exception ex){

ex.printStackTrace();

return rtls;

}finally{

try{

cstmt.close();

cstmt=null;

}catch(Exception ex){

ex.printStackTrace();

}

}

}

private   List resultSet2Map(ResultSet rs) throws Exception {

if(rs==null)return null;

ResultSetMetaData meta = rs.getMetaData();

int count = meta.getColumnCount();

List list=new ArrayList();

while(rs.next())

{

Map map = new HashMap(count);

for (int i = 1; i <= count; i++) {

map.put(meta.getColumnName(i).toLowerCase(),rs.getObject(i));

}

list.add(map);

}

return list;

}

4.调用存储过程(java)

MyQuery query=new MyQuery();

query.setQueryString("{ call TESTC(?,?,?,?,?,?,?) }");

query.addPara(new Integer(8888));

query.addPara(new String("this is test4444!!!"));

query.addParaOut(new Integer(1));

query.addParaOut(new Integer(2));

query.addParaOut(new Integer(3));

query.addParaCursorOut(new Integer(1));

query.addParaCursorOut(new Integer(2));

return super.callProcedureGetList(query);

5.解析返回结果(java)

private void showDataInfo(List list)

{

if (list!=null && list.size()>0)

{

for (int k=0;k

{

if (list.get(k) instanceof String  )

{

String str=(String)list.get(k);

System.out.println(str);

}

else if (list.get(k) instanceof Integer  )

{

Integer intvalue=(Integer)list.get(k);

System.out.println(intvalue);

}

else if (list.get(k) instanceof Date  )

{

Date datevalue=(Date)list.get(k);

System.out.println(datevalue);

}

else if (list.get(k) instanceof ArrayList  )

{

List rs=(ArrayList)list.get(k);

if (rs!=null && rs.size()>0)

{

for (int i=0;i

{

Map tsetMap=(HashMap)rs.get(i);

if (tsetMap!=null && tsetMap.size()>0)

{

Iterator it= tsetMap.keySet().iterator();

System.out.println("----begin-----");

while (it.hasNext())

{

String keyValue= (String)it.next();

Object value=(Object)tsetMap.get(keyValue);

System.out.println("name :"+keyValue+"--------"+"value :"+value);

}

System.out.println("----end------");

}

}

}

}

}

}

}

6.MyQuery 结构(java)

public class MyQuery {

/** 参数集合对象 */

private List paralist = new ArrayList();

/** 输出参数 */

private List outlist =new ArrayList();

/** 输出参数 */

private List outCursorlist =new ArrayList();

....}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值