Spring
+MSSQL Server 2008
アプリケーションを実装しています。API を使用SimpleJDBCCall
してストアド プロシージャを実行し、結果を取得します。
単一テーブルの結果を持つストアド プロシージャの場合は問題なく動作しますが、複数のテーブルの結果を持つプロシージャに使用する方法がわかりません。
プロシージャ本体の例:
マルチテーブルの結果
SELECT * FROM TABLE1
SELECT * FROM TABLE2
Spring
+MSSQL Server 2008
アプリケーションを実装しています。API を使用SimpleJDBCCall
してストアド プロシージャを実行し、結果を取得します。
単一テーブルの結果を持つストアド プロシージャの場合は問題なく動作しますが、複数のテーブルの結果を持つプロシージャに使用する方法がわかりません。
プロシージャ本体の例:
マルチテーブルの結果
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");