使用Jorm处理Oracle存储过程返回多个游标 (二)

2014-11-24 09:11:54 · 作者: · 浏览: 2
ic Session session;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
session = Jorm.getSession();
}

@AfterClass
public static void destroyAfterClass() {
Jorm.free();
}


@Test
public void save_user() {
session.clean(User.class);
User user = null;
for (int i = 0; i < 1600; i++) {
String sex = (i % 2 == 0 "男" : "女");
user = new User(Strings.fixed(5), sex, Numbers.random(98), Strings.random(8));
session.save(user);
}
}

@Test
public void oracle_load_two_cursor() {

save_user();

final String pro = "{call pro_query_users( , , )}";
final List gtIdUsers = new ArrayList();
final List likeNameUsers = new ArrayList();

session.call(new ProcedureCaller() {

public CallableStatement prepare() throws SQLException {
CallableStatement cs = this.getSession().getConnection().prepareCall(pro);
cs.setInt(1, 20);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);
return cs;
}

public String callback(CallableStatement cs) throws SQLException {
cs.execute();
ResultSet rsOne = (ResultSet) cs.getObject(2);//返回第一个游标
ResultSet rsTwo = (ResultSet) cs.getObject(3);//返回第二个游标
while(rsOne != null && rsOne.next()) {
gtIdUsers.add(session.getPersister().toBean(rsOne, User.class));
}
while(rsTwo != null && rsTwo.next()) {
likeNameUsers.add(session.getPersister().toBean(rsTwo, User.class));
}
return null;
}
});

Assert.assertTrue(gtIdUsers.size() > 0);
System.out.println(gtIdUsers.size() + " => " + gtIdUsers);

Assert.assertTrue(likeNameUsers.size() > 0);
System.out.println(likeNameUsers.size() + " => " + likeNameUsers);
}
}

作者“风故故,也依依”