|
|
|
|
Blog信息
|
blog名称:四裤全输的小窝~~ 日志总数:178 评论数量:699 留言数量:198 访问次数:1157016 建立时间:2005年10月29日 | |
|
|
|
|
 |
|
|
|
|
[JAVA][原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 四裤全输 发表于 2006/4/15 17:28:24
|
今天研究了一下午,参考了网上的众多方法,再已搞写,将实现方法写出来,抛一下砖,如果有更好的方法,请告之一下吧.注:1.这两个方法只是针对返回一个结果集的情况。2.过程的返回参数是最后一个。 /** * 执行函数,返回结果是记录集合,,传人参数全部为字符型,数字&日期型需要在存储过程中转换 * @param procedurename String 存储过程名 * @param inparam Vector 存储过程输入参数列表 * @return ResultSet 执行结果记录集合 * @throws Exception 执行存储过程异常 */ public static final ResultSet callPKGFuntionReturnResultSet(String procedurename, Vector inparam) throws Exception { //保存执行存储过程结果 ResultSet rs = null; //判断传入参数是否为空 if (procedurename == null || procedurename.length() == 0) { return rs; } //数据库连接 Connection conn = null; //获取连接session Session session = HibernateUtil.getSession(); conn = session.connection(); //输入参数变量 int inparamcount = 0;
//获取输入参数个数 inparamcount = inparam.size(); StringBuffer sSql = new StringBuffer("begin "); sSql.append(":1 := "); sSql.append(procedurename).append("("); try { //给存储过程传入参数 for (int j = 0; j < inparamcount; j++) { sSql.append("'"+(String) inparam.get(j)+"'"); if (j != (inparamcount-1)){ sSql.append(","); } } sSql.append("); end;");
CallableStatement stmt = conn.prepareCall(sSql.toString()); //注册输出参数 stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); stmt.execute(); rs =(ResultSet) stmt.getObject(1); //关闭连接 conn.close(); session.close(); } catch (Exception e) { System.out.println("执行函数:" + procedurename + " " + e.toString() + "sql:" + sSql.toString()); System.out.println(e.getCause()+"\n"+e.getMessage()); conn.close(); session.close(); } finally { conn.close(); session.close(); } return rs; }
/** * 执行存储过程,返回结果是记录集合,,传人参数全部为字符型,数字&日期型需要在存储过程中转换 * @param procedurename String 存储过程名 * @param inparam Vector 存储过程输入参数列表 * @return ResultSet 执行结果记录集合 * @throws Exception 执行存储过程异常 */ public static final ResultSet callPKGProcedureReturnResultSet(String procedurename, Vector inparam) throws Exception { //保存执行存储过程结果 ResultSet rs = null; //判断传入参数是否为空 if (procedurename == null || procedurename.length() == 0) { return rs; } //数据库连接 Connection conn = null; //获取连接session Session session = HibernateUtil.getSession(); conn = session.connection(); //输入参数变量 int inparamcount = 0;
//获取输入参数个数 inparamcount = inparam.size(); StringBuffer sSql = new StringBuffer("begin "); sSql.append(procedurename).append("("); StringBuffer inparatmp = new StringBuffer(""); try { //给存储过程传入参数 for (int j = 0; j < inparamcount; j++) { inparatmp.append("'" + (String) inparam.get(j) + "'"); if (j != (inparamcount-1)){ inparatmp.append(","); } } if (inparatmp.equals("")){ sSql.append(inparatmp) .append(":rc"); } else { sSql.append(inparatmp) .append(",:rc"); } sSql.append("); end;");
CallableStatement stmt = conn.prepareCall(sSql.toString()); //注册输出参数 stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
stmt.execute(); rs =(ResultSet) stmt.getObject(1); //关闭连接 conn.close(); session.close(); } catch (Exception e) { System.out.println("执行存储过程:" + procedurename + " " + e.toString() + "sql:" + sSql.toString()); System.out.println(e.getCause()+"\n"+e.getMessage()); conn.close(); session.close(); } finally { conn.close(); session.close(); } return rs; }
|
阅读全文(7011) | 回复(7) | 编辑 | 精华 |
|
|
|
|
|
|
|
|
|
|
回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 jianghw(游客)发表评论于2006/4/24 10:03:51
|
java 里 大家调用的存储过程如下格式:
proc = conn.prepareCall("{ call procedurename (?,?, ?) }");
而你用的 是
begin
call procedurename
end ;
这种方法参数类型必须是一种类型, 必须到存储过程中进行类型转化。
请问 你这种方法叫什么啊。
以下为blog主人的回复:我用的是语句块啊,就是begin SQL语句;end;
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
|
|
|
回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 GIGI(游客)发表评论于2006/4/24 9:38:21
|
if (inparatmp.equals("")){ sSql.append(inparatmp).append("?"); } else { sSql.append(inparatmp).append(",?"); }
我用 ? 代替:rc 也可以啊。
为什么要用 :rc 啊。
你的msn:是多少啊, 我能加你为好友吗?
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
|
|
|
回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 四裤全输发表评论于2006/4/21 19:27:20
|
以下引用GIGI(游客)在2006-4-21 16:09:53的评论:
append(":rc");
是干吗的啊。
if (inparatmp.equals("")){ sSql.append(inparatmp) .append(":rc"); } else { sSql.append(inparatmp) .append(",:rc");
在这里进行一次判断,如果是没有输入参数的话,就只要一个输出参数就行了,前面就不能有逗号!
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
|
|
|
回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 GIGI(游客)发表评论于2006/4/21 16:09:53
|
|
|
|
|
|
|
|
|
|
|
回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间, 随笔, 软件技术, 电脑与网络 呵呵(游客)发表评论于2006/4/18 11:31:26
|
用{?=call FunctionName}这种方式的,oralce中的存储过程好像必须在package中定义precedure或function的方式,不行直接用precedure或function
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
» 1 »
|