我正在实施一个Spring
+MSSQL Server 2008
应用程序。我使用SimpleJDBCCall
API 来执行存储过程并检索结果。
对于具有单表结果的存储过程,它工作正常,但我不知道如何将它用于具有多表结果的过程。
示例程序主体:
多表结果
SELECT * FROM TABLE1
SELECT * FROM TABLE2
我正在实施一个Spring
+MSSQL Server 2008
应用程序。我使用SimpleJDBCCall
API 来执行存储过程并检索结果。
对于具有单表结果的存储过程,它工作正常,但我不知道如何将它用于具有多表结果的过程。
示例程序主体:
多表结果
SELECT * FROM TABLE1
SELECT * FROM TABLE2
我是最无知的,它确实有效!您可以指定两个结果集,每个结果集都有自己的映射器。在代码中它看起来像这样:
SimpleJdbcCall call = new SimpleJdbcCall(this.jdbc)
.withProcedureName("get_users3")
.returningResultSet("rs1", new ParameterizedRowMapper<Object[]>()
{
@Override
public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException
{
return new Object[] { rowNum, rs.getInt(1), rs.getString(2) };
}
})
.returningResultSet("rs2", new ParameterizedRowMapper<Object[]>()
{
@Override
public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException
{
return new Object[] { rowNum, rs.getInt(1), rs.getString(2) };
}
});
Map<String, Object> res = call.execute();
assertNotNull(res.get("rs1"));
assertNotNull(res.get("rs2"));
List<Object[]> l1 = (List<Object[]>)res.get("rs1");
List<Object[]> l2 = (List<Object[]>)res.get("rs2");