建立存儲過程:java
**CREATE PROCEDURE productpricing(P_ID IN VARCHAR2,P_COUNT OUT NUMBER) BEGIN SELECT Count(prod_num) AS P_COUNT WHERE prod_id =P_ID FROM products; END;**
============================ jdbc調用:sql
/* * 括號中的問號和存儲過程參數進行匹配 */ String sql = "{call productpricing(?,?)}"; // 加載驅動程序 Class.forName("oracle.jdbc.driver.OracleDriver"); // 獲取鏈接對象 Connection con = DriverManager.getConnection(url, uid, pwd); // 獲取執行對象 CallableStatement cs = con.prepareCall(sql); cs.setString(1, "1a2b"); // out 註冊的index 和取值時要對應 cs.registerOutParameter(2, Types.INTEGER); // 執行SQL命令 cs.execute();
=============================== hibernate:session
public Integer method(){ return (Integer) this.getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session){ Connection conn = session.connection(); String sql ="{call productpricing(?,?)}"; CallableStatement cs; Integer result=0; try { cs= conn.prepareCall(sql); cs.setString(1, "1a2b"); cs.registerOutParameter(2,Types.INTEGER); boolean rs= cs.execute(); tttrs=(Integer)cs.getInt(2); } catch (SQLException e) { System.out.println("sql異常:"+e.getMessage()); } return result; } }); }
================== mybatis: 編輯Mapper.xml文件,添加以下的配置項mybatis
<select id="getCount" parameterMap="getCountMap" statementType="CALLABLE"> CALL mybatis.productpricing(?,?) </select> <parameterMap type="java.util.Integer" id="getCountMap"> <parameter property="prod_id" mode="IN" jdbcType="VARCHAR"/> <parameter property="pcount" mode="OUT" jdbcType="INTEGER"/> </parameterMap>
調用:oracle
SqlSession sqlSession = MyBatisUtil.getSqlSession(); String statement = "me.gacl.mapping.userMapper.getCount";//映射sql的標識字符串 Map<String, Integer> parameterMap = new HashMap<String, Integer>(); parameterMap.put("p_id", "1a2b"); parameterMap.put("pcount", 0); sqlSession.selectOne(statement, parameterMap); Integer result = parameterMap.get("usercount"); System.out.println(result); sqlSession.close();