欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jdbc执行存储过程,返回游标结果集

程序员文章站 2022-05-09 22:18:09
...

执行存储过程,返回一个游标结果集,并把游标结果集取出来放入一个list中返回

public List getProcedureValues(String procedure, Object[] o) {

List list = new ArrayList();

Connection con = null;

CallableStatement ps = null;

ResultSet rs = null;

try {

con = getSession().connection();

ps = con.prepareCall(procedure);

ps.registerOutParameter(1, OracleTypes.CURSOR);

for(int i = 0; i < o.length; i++) {

if(null == o[i] || "".equals(o[i].toString().trim()) || "*".equals(o[i].toString().trim())) {

ps.setNull(i+2, Types.VARCHAR);

} else {

ps.setObject(i+2, o[i]);

}

}

ps.execute();

rs = (ResultSet) ps.getObject(1);

while(rs.next()) {

Map base = new LinkedHashMap(100);

ResultSetMetaData data = rs.getMetaData();

for(int i = 1; i < (data.getColumnCount()+1); i++) {

String name = data.getColumnName(i);

Object obj = rs.getObject(name);

base.put(name.toLowerCase(), obj!=null?obj:"");

}

list.add(base);

}

rs.close();

ps.close();

} catch(Exception e) {

e.printStackTrace();

throw new RuntimeException("根据sql查询失败\r\n" + e.getMessage());

}

return list;

}