【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
创建存储过程:
**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调用:
/*
* 括号中的问号和存储过程参数进行匹配
*/
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:
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文件,添加如下的配置项
<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>
调用:
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();
来源:oschina
链接:https://my.oschina.net/u/1448523/blog/678540