[本站首页] [管理页面] [写新日志] [退出]

朝为田舍郎,暮登天子堂,将相本无种,男儿当自强。
首页(178) Hibernate(10) JAVA(19) Web(15) Struts(7) 口水(9) Ides(18) 其它(51) AJAX(6) database(29) 
Blog信息

blog名称:四裤全输的小窝~~
日志总数:178
评论数量:699
留言数量:198
访问次数:1157016
建立时间:2005年10月29日

Blog内搜索



日志更新

谷歌地图定位偏移解决方法
【转】利用Windows内置的命令作端口
WIN2003服务器安全加固方案
[转]sql server 日期比较、日
MediaCoder 一般参数设置
[转]VMware中创建共享磁盘阵列的方
缓解vss共享文件夹的安全隐患问题(转)
Delphi 中调用JavaScript
微软的官方方法:延长Windows Se
cxGrid 过滤 排序后 取选中记录的

最新评论

回复:谷歌地图定位偏移解决方法
回复:谷歌地图定位偏移解决方法
回复:WIN2003服务器安全加固方案
回复:cxGrid 过滤 排序后 取选中
回复:TreeView 父节点 子节点 
回复:[转]Oracle Instead
回复:DWR 官方下载地址
ugg  boots
回复:cxGrid 过滤 排序后 取选中
回复:DWR 官方下载地址

友情链接

biglin's Blog
NoisyRam's Blog
Stone's Blog
Kevin 的小家
『知』治通鉴

留言板




[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

append(":rc"); 是干吗的啊。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间,  随笔,  软件技术,  电脑与网络 四裤全输发表评论于2006/4/19 9:19:17

我的是在package中定义precedure或function的哟~~我看了一下错误,好像是Hibernate的代理出问题了~

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间,  随笔,  软件技术,  电脑与网络 呵呵(游客)发表评论于2006/4/18 11:31:26

用{?=call FunctionName}这种方式的,oralce中的存储过程好像必须在package中定义precedure或function的方式,不行直接用precedure或function

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:[原创]JAVA中调用Oracle包的过程和函数,返回结果集
原创空间,  随笔,  软件技术,  电脑与网络 四裤全输发表评论于2006/4/15 17:37:43

看到有用{?=call FunctionName}这种方式的,但我测试了不能成功,原因未知

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.289 second(s), page refreshed 144784531 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号