我们如何从MySQL存储过程(例程)返回游标。或者另一种将值列表从MySQL Proc返回给Java程序的方法。我们试图在Oracle中实现与Sys Ref Cursor类似的功能,并且看起来像MySQL中有类似的东西。但是,想知道这是一个非常常见的用例,应该如何获取由mysql中的proc返回的值列表。在MySQL中返回游标
版本 - 的MySQL服务器5.5.15
我们如何从MySQL存储过程(例程)返回游标。或者另一种将值列表从MySQL Proc返回给Java程序的方法。我们试图在Oracle中实现与Sys Ref Cursor类似的功能,并且看起来像MySQL中有类似的东西。但是,想知道这是一个非常常见的用例,应该如何获取由mysql中的proc返回的值列表。在MySQL中返回游标
版本 - 的MySQL服务器5.5.15
我希望帮助:What is the equivalent of Oracle’s REF CURSOR in MySQL when using JDBC?
这里是上面参考线程提到的最新版本: http://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-implementation-notes.html
它仍然说“ MySQL不支持SQL游标,并且JDBC驱动程序不会模拟它们,所以“setCursorName()”不起作用。“
“返回值列表返回到Java程序”。 MySql(和Connector/J)支持存储过程的多个输出参数。如果这不是你想要的,并且你想要一个结果集,你可以在你的存储过程中做一个SELECT,并且这个SP返回一个结果集,你可以用CallableStatement.executeQuery()读取数据。例如:
MySQL:
create procedure get_data(in param1 date)
begin
select * from mytable where mydate=param1;
end;
的Java:
CallableStatement cstmt = MyConnection.prepareCall("{call mydb.get_data(?)}");
cstmt.setString(1, '2012-01-01');
ResultSet rs = cstmt.executeQuery();
int nF = rs.getMetaData().getColumnCount();
rs.last();
String[][] out = new String[rs.getRow()][nF];
for (int i=0; i<nF; i++) {
rs.beforeFirst();
int n=0;
while (rs.next()) {
out[n][i]=rs.getString(i+1);
n++;
}
}
cstmt.close();
return out;