`
JAVA天地
  • 浏览: 674354 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

java调用存储过程

阅读更多

有两种方式:

1、通过输出参数返回一个字符串(可以由多个输出参数,这里我们只演示一个的情况)

DB2过程:(只是示例,不要直接去运行,我没有时间去调试存储过程)

CREATE PROCEDURE test1
(IN V_IARG1 VARCHAR(40),
IN V_IARG2 VARCHAR(20),
IN V_IARG3 VARCHAR(20),
OUT V_ORET VARCHAR(40)
)
SPECIFIC test1
LANGUAGE SQL
P1:BEGIN

SET v_oret = '1';
RETURN 0;

END P1

oracle类似上面,不再写了。

java方法:

publicStringcallProc(StringprocName,String[][]params)...{
log.debug(
"procName:"+procName);
for(inti=0;params!=null&&i<params.length;i++)...{
if(params[i][1]==null||params[i][1].equals("")
||params[i][1].equals("null"))...{
params[i][
1]="%";
}

log.debug(params[i][
1]);
}

try...{
CallableStatementproc
=null;
Connectionconn
=null;
conn
=this.getSession().connection();
intindex=procName.indexOf("?");
procName
=procName.substring(0,index)+"?,"
+procName.substring(index);
proc
=conn.prepareCall(procName);
intparamsNum=params.length;
for(intk=0;k<paramsNum;k++)...{
if(params[k][0].equalsIgnoreCase("String"))...{
proc.setString(k
+1,params[k][1]);
}
elseif(params[k][0].equalsIgnoreCase("Long"))...{
proc.setLong(k
+1,Long.parseLong(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("Integer"))...{
proc.setInt(k
+1,Integer.parseInt(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("BigDecimal"))...{
proc.setBigDecimal(k
+1,newBigDecimal(params[k][1]));
}

}

proc.registerOutParameter(paramsNum
+1,Types.VARCHAR);
proc.execute();
returnproc.getString(paramsNum+1);
}
catch(Exceptione)...{
thrownewRuntimeException(e);
}

}

2、返回一个结果集(ResultSet)

db2等是直接获取结果集,但oracle不支持,必须用一个输出参数来获取结果集

db2过程示例:

CREATE PROCEDURE TEST2
(IN V_ARG VARCHAR(40)
)
SPECIFIC TEST2
DYNAMIC RESULT SETS 1
LANGUAGE SQL
P1: BEGIN
DECLARE OUT_CUR CURSOR WITH RETURN FOR
SELECT *
FROM TEST2_TABLE
WHERE XXXXXXXX
ORDER BY XXXXXX;
OPEN OUT_CUR;
END P1

ORACLE示例:


CREATE OR REPLACE procedure TEST3(
v_args1 IN VARCHAR2,--输入参数示例,如果你不需要,也可以不加
my_cur OUT yy_db.V_CURSOR.V_CUR--输出参数,oracle跟其它数据库不同的地方,必须加输出参数,用游标返回结果集
)
AS
xxxxx 省略
begin

V_RETSQL := ' select * from xxxxtable 省略';
OPEN my_cur FOR V_RETSQL;

end TEST3;

JAVA调用方法:

publicListcallProcList(StringprocName,String[][]params)...{
log.debug(
"procName:"+procName);
for(inti=0;params!=null&&i<params.length;i++)...{
if(params[i][1]==null||params[i][1].equals("")
||params[i][1].equals("null"))...{
params[i][
1]="%";
}

log.debug(params[i][
1]);
}

Listlist
=newArrayList();
ResultSetrs
=null;
try...{
Connectionconn
=this.getSession().connection();
if(this.getSystemConfig().isOracle())...{
//conn.setAutoCommit(false);
intindex=procName.indexOf("?");
procName
=procName.substring(0,index)+"?,"
+procName.substring(index);
}

CallableStatementproc
=conn.prepareCall(procName);
intparamsNum=params.length;
for(intk=0;k<paramsNum;k++)...{
if(params[k][0].equalsIgnoreCase("String"))...{
proc.setString(k
+1,params[k][1]);
}
elseif(params[k][0].equalsIgnoreCase("Long"))...{
proc.setLong(k
+1,Long.parseLong(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("Integer"))...{
proc.setInt(k
+1,Integer.parseInt(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("BigDecimal"))...{
proc.setBigDecimal(k
+1,newBigDecimal(params[k][1]));
}

}


if(this.getSystemConfig().isOracle())...{
proc.registerOutParameter(paramsNum
+1,OracleTypes.CURSOR);
proc.execute();
rs
=(ResultSet)proc.getObject(paramsNum+1);
}
else...{
booleanb=proc.execute();
rs
=proc.getResultSet();
}

intcolumnNum=rs.getMetaData().getColumnCount();
Object[]columnType
=newObject[columnNum];
for(inti=0;i<columnNum;i++)...{
//System.out.print(rs.getMetaData().getColumnType(i));
//System.out.println(rs.getMetaData().getColumnTypeName(i));
columnType[i]=String.valueOf(rs.getMetaData().getColumnType(
i
+1));
if(columnType[i].equals("3"))...{
columnType[i]
="2";
}

}

list.add(columnType);
while(rs.next())...{
Object[]objArr
=newObject[columnNum];
for(inti=0;i<columnNum;i++)...{
objArr[i]
=rs.getObject(i+1);
}

list.add(objArr);
}

for(inti=0;log.isDebugEnabled()&&i<list.size()&&i<100;i++)...{
Object[]objArr
=(Object[])list.get(i);
for(intj=0;j<objArr.length;j++)...{
if(j!=0)...{
System.out.print(
",");
}

System.out.print(objArr[j]);
}

System.out.println();
}

returnlist;
}
catch(Exceptionex)...{
log.error(
"",ex);
thrownewRuntimeException(ex);
}

}

调用示例:(以上两种类似)

String proc = "{call TEST3(?,?,?,?,?,?)}";
params = new String[6][2];
params[0][0] = "String";
params[0][1] ="123123";

params[1][0] = "String";
params[1][1] = userSession.getTransCompanyId();

params[2][0] = "String";
params[2][1] = String.valueOf(map.get("startRq")).replaceAll("-",
"");
params[3][0] = "String";
params[3][1] = String.valueOf(map.get("endRq")).replaceAll("-", "");
params[4][0] = "String";
params[4][1] = String.valueOf(map.get("yylx"));
params[5][0] = "String";
params[5][1] = String.valueOf(map.get("tjjb"));

.......以下省略

分享到:
评论

相关推荐

    JAVA调用存储过程

    ### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...

    java 调用存储过程

    值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...

    java调用存储过程实例

    ### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...

    java调用存储过程(含out参数)

    总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...

    java调用存储过程同时返回值和多个table

    java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集

    java调用存储过程返回数组

    总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...

    Java调用存储过程

    Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    java调用存储过程小结.pdf

    Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...

    Java调用存储过程的2种方法

    ### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...

Global site tag (gtag.js) - Google Analytics