HIBERNATE调用有两个返回值的oracle存储过程怎么做
1个回答
展开全部
= 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 次 有帮助? 请推荐
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询