技术开发 频道

使用 Spring 框架调用 DB2 存储过程

    4. 使用Spring framework为存储过程传入参数

    用户在web页面上填入custNum,提交后经Struts的validation验证传入action的FormBean中,然后再从FormBean中得到custNum,并由清单8中(3)传入Spring framework。

    5. 使用Spring framework获得存储过程的传出参数和结果集

    Spring framework提供了调用存储过程的方法,下面对几个相关的类和接口做简单介绍,你也可以通过Spring API获得更多详细信息。

    org.springframework.jdbc.object.StoredProcedure 这是一个抽象类,通过declareParameter方法来声明存储过程的输入输出参数,再由execute方法来调用存储过程。

    org.springframework.jdbc.core.SqlParameter 用来代表存储过程的参数。

    org.springframework.jdbc.core.ResultSetSupportingSqlParameter SqlParameter的子类,是SqlOutParameter、SqlReturnResultSet这些支持结果集参数类的公共基类

    org.springframework.jdbc.core.SqlOutParameter ResultSetSupportingSqlParameter的子类,用来代表存储过程的输出参数。

    org.springframework.jdbc.core.SqlReturnResultSet ResultSetSupportingSqlParameter的子类,用来代表调用存储过程的输出结果集。

    org.springframework.jdbc.core.RowMapper 这是一个接口,通常为JdbcTemplate的查询方法或者存储过程返回结果集使用。

    了解了Spring为我们提供的这些关于存储过程的方法和接口后,来看看具体的实现方法。如清单10所示。earchDAOImpl.java中有三个内部类,其中SearchCustomersProcedure来负责声明数据库连接和存储过程名(2)、输入参数(6)、输出参数(5)以及输出结果集(3)(4),DemoRowMapper和DemoRowMapper2来负责取得结果集中的数据。其中(3)创建一个名为"resultSet"的结果集,通过DemoRowMapper(7)来取得结果集中的数据,当有多个结果集的时候需要重复这个过程,如(6)(8)。最后由execute方法(1)填入输入参数并执行存储过程调用。

    清单10. Code in SearchDAOImpl.java.

public Map execute(String custNum) { SearchCustomersProcedure sp = new SearchCustomersProcedure(dataSource); Map map = new HashMap(1); map.put("piCust_num", custNum); Map results = sp.execute(map);|(1) return results; } private class SearchCustomersProcedure extends StoredProcedure { SearchCustomersProcedure(DataSource dataSource) { super(dataSource, sprocName);|(2) declareParameter(new SqlReturnResultSet("resultSet", new DemoRowMapper()));|(3) declareParameter(new SqlReturnResultSet("resultSet2", new DemoRowMapper2()));|(4) declareParameter(new SqlOutParameter("poGenStatus", Types.INTEGER)); |(5) declareParameter(new SqlParameter("piCust_num", Types.VARCHAR)); |(6)} } private class DemoRowMapper implements RowMapper {|(7) public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Customer customer = new Customer(); customer.setCustNum(rs.getString(1)); customer.setCustName(rs.getString(2)); return customer; } } private class DemoRowMapper2 implements RowMapper {|(8) public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Customer customer = new Customer(); customer.setCustName(rs.getString(1)); customer.setCustNum(rs.getString(2)); customer.setCustAddress(rs.getString(3)); customer.setCustCity(rs.getString(4)); customer.setCustCountry(rs.getString(5)); return customer; } }
0
相关文章