HIBERNATE调用有两个返回值的oracle存储过程怎么做

 我来答
大爷我叫Rcw35
2013-11-04 · TA获得超过102个赞
知道答主
回答量:127
采纳率:0%
帮助的人:134万
展开全部
= call fuctionName(?,?,?) 没见过有两个返回值的。。。 Connection conn = session.connection(); �0�2 ResultSet rs =null; �0�2 CallableStatement call = conn.prepareCall("{Call proc(?,?,?)}"); �0�2 call.setString(0,"abc"); call.registerOutParameter(1, Types.VARCHAR); call.registerOutParameter(2,Types.VARCHAR); rs = call.executeQuery(); �0�2 if(rs.next()){ System.out.println("存储过程得到的第一个返回值是:"+rs.getString(1)); System.out.println("存储过程得到的第二个返回值是:"+rs.getString(2)); } 2011-03-18 18:09 推荐: 0 次 有帮助? 请推荐Java code Session session = HibernateSessionFactory.getSession(); Connection con =null; CallableStatement cstmt =null; ResultSet rs=null; Transaction tr =null; String backValue =""; String backStr; try{ tr = session.beginTransaction(); con = session.connection(); try { cstmt = con.prepareCall(" call ${SHOP88.Sp_aj001_iu(?,?,?,?,?,?,?,?,?,?,?,?,?)}"); cstmt.registerOutParameter(1, Types.NUMERIC); cstmt.registerOutParameter(2, Types.VARCHAR); cstmt.setBigDecimal(3, orderNum); cstmt.setBigDecimal(4, customId); cstmt.setDouble(5, allPrice); cstmt.setDouble(6,ACCTF_SEND_SCHD_AMT); cstmt.setString(7, "CD1"); cstmt.setString(8, "ITV"); cstmt.setDouble(9, CARD_APPR_AMT); cstmt.setDouble(10,ACCM_APPLY_AMT); cstmt.setDouble(11, CRDT_APPLY_AMT); cstmt.setDouble(12, PCARD_APPLY_AMT); cstmt.setString(13, "ITV"); rs = cstmt.executeQuery(); if(rs.next()){ System.out.println("存储过程得到的第一个返回值是:"+rs.getString(1)); System.out.println("存储过程得到的第二个返回值是:"+rs.getString(2)); } //backValue = cstmt.getString(1); //backStr = cstmt.getString(2); // System.out.println(cstmt.getString(1)+"===="); // if(backValue.equals(0) ){ // System.out.println("正常"); // return true; // } } catch (SQLException e) { e.printStackTrace(); } }catch(HibernateException e){ } 这个报错 是什么情况啊 Exception in thread "main" java.lang.NullPointerException at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:870) at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:957) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329) at com.tuge.iptv.order.dao.impl.OrderGoodsDAOImpl.orderStatus(OrderGoodsDAOImpl.java:117) 2011-03-23 09:54 推荐: 0 次 有帮助? 请推荐 自己先把它顶起来 2011-03-23 09:57 推荐: 0 次 有帮助? 请推荐 把存储过程亮出了 2011-03-23 10:06 推荐: 0 次 有帮助? 请推荐SQL code Sp_aj001_iu ( an_rtn_code OUT NUMBER, --返回代码,负数说明有错误av_rtn_msg OUT VARCHAR2, --返回信息an_ORD_ID IN tb_aj001.ord_id%TYPE, an_CUST_ID IN tb_aj001.cust_id%TYPE, an_TOT_ORD_AMT IN tb_aj001.tot_ord_amt%TYPE, an_acctf_send_schd_amt IN tb_aj001.acctf_send_amt%TYPE, av_SEND_BANK_CD IN tb_aj001.send_bank_cd%TYPE, av_SENDER IN tb_aj001.sender%TYPE, an_CARD_APPR_AMT IN tb_aj001.card_appr_amt%TYPE, an_ACCM_APPLY_AMT IN tb_aj001.accm_apply_amt%TYPE, an_CRDT_APPLY_AMT IN tb_aj001.crdt_apply_amt%TYPE, an_PCARD_APPLY_AMT IN tb_aj001.pcard_apply_amt%TYPE, av_etr_id INVARCHAR2 ) 存储过程 2011-03-23 10:13 推荐: 0 次 有帮助? 请推荐 第一个和第二个 是返回值 像上面的代码那样写有用吗 2011-03-23 10:23 推荐: 0 次 有帮助? 请推荐 个人建议不要用hibernate调存储过程,Hibernate的优势是O-R映射和DML操作 2011-03-23 10:25 推荐: 0 次 有帮助? 请推荐 项目现在用的是Hibernate 再写个jdbc来调用? 2011-03-23 10:29 推荐: 0 次 有帮助? 请推荐 你那个错是空指针,debug会吗?看哪个对象为空 2011-03-23 21:21 推荐: 0 次 有帮助? 请推荐 是call ${SHOP88.Sp_aj001_iu(?,?,?,?,?,?,?,?,?,?,?,?,?) 写错了 多了个$ 2011-04-15 16:02 推荐: 0 次 有帮助? 请推荐
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式