--mysql存储过程实例: create procedure sp_test(in id int, out ename varchar(50)) --注意这里没有游标做为out参数,固然多个in和out道理同样,参数本身加。 begin select e.name into ename from emp e where e.id=id; select * from emp; --第一个结果集 select * from dept; --第二个结果集 end
public static void testCursor() { Connection conn = DBUtil.getConnection(); try { CallableStatement cs = conn.prepareCall("{call sp_test(?,?)}"); cs.registerOutParameter(2, Types.VARCHAR); cs.setInt(1, 2); //判断执行是否为true,若是为true,则迭代结果集 Boolean hadResults = cs.execute(); System.out.println(cs.getString(2)); while(hadResults){ //为true则开始迭代结果集 ResultSet rs = cs.getResultSet(); ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); for (int i = 0; i < count; i++) { String columName = rsmd.getColumnName(i+1); String columTypeName = rsmd.getColumnTypeName(i+1); String columClass = rsmd.getColumnClassName(i+1); int columLength = rsmd.getColumnDisplaySize(i+1); System.out.println(columName+"--"+columTypeName+"--"+columClass+"--"+columLength); } System.out.println("-----------------"); //判断是否还有结果集 hadResults = cs.getMoreResults(); } } catch (SQLException e) { e.printStackTrace(); } }
--SQL Server存储过程实例 create PROCEDURE test_cursor @pro_id int, @pro_name varchar(50) output --可多个输入输出参数自个加 AS BEGIN select @pro_name=e.name from emp e where e.id=@pro_id; --注意语法区别 select * from emp; --结果集1 select * from dept; --结果集2 end; --java中调用SQL Server存储过程和mysql一个套路,不在赘述,上面示例便是。