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<list.size();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<rs.size();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();
....
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yang8210/archive/2006/04/12/660742.aspx
分享到:
相关推荐
### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...
### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...