javaWeb项目 Hibernate 调用数据库存储过程的方法

Dao层调用存储过程分两种情况,有输出参数 和没有输出参数。

处理没有输出参数时

public void dataBackup(final String filePath,final String fileName) throws DAOException {
		Session session = sessionFactory.getCurrentSession();
		session.doWork(new Work() {
			public void execute(Connection conn) throws SQLException {
				CallableStatement call = conn.prepareCall("{call 存储过程名(?,?)}");
				call.setString(1, fileName);            //输入参数1
				call.setString(2, filePath + fileName);//输入参数2
				call.executeQuery();
				call.close();
			}
			
		});
	}

处理待输出参数时


public Integer judgeQualified(final Integer compressionTestId) throws DAOException {
		Session session = sessionFactory.getCurrentSession();
		final Map<String, Integer> map = new HashMap<String, Integer>();
		session.doWork(new Work() {
			public void execute(Connection conn) throws SQLException {
				CallableStatement call = null;
				try {
					call = conn.prepareCall("{call get_test_result(?,?)}");
					call.setInt(1, compressionTestId);
					call.registerOutParameter(2, Types.INTEGER);
					call.executeQuery();
					map.put("states", call.getInt(2));// 返回值
				} catch (Exception e) {
					map.put("states", 4);
					e.printStackTrace();
				} finally {
					if (call != null) {
						call.close();
					}
				}
			}
		});
		Integer states = map.get("states") == null ? 4 : Integer.parseInt(map.get("states").toString());
		return states;
	}

由于使用内部对象无法使用变量赋值,所有通过构造map的方式取出存储过程的输出值。这样就可以成功调到输出值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值