MySQL 中返回光标

发布于 2024-12-05 08:57:01 字数 205 浏览 1 评论 0原文

我们如何从 MySQL 存储过程(例程)返回游标。或者另一种从 MySQL Proc 将值列表返回到 Java 程序的方法。我们正在尝试在 Oracle 中实现与 Sys Ref Cursor 类似的功能,看起来 MySQL 中也有类似的功能。但想知道这是一个非常常见的用例,应该如何获取 mysql 中 proc 返回的值列表。

版本 - MySQL-server-5.5.15

How do we return a cursor from MySQL Stored Procedure (Routines). Or another approach to return a list of values back to a Java program from the MySQL Proc. We are trying to implement the similar functionality as Sys Ref Cursor in Oracle and looks like there is similar thing in MySQL. But wondering as this a very common usecase, what should be a the way to get a list of values returned by a proc in mysql.

Version - MySQL-server-5.5.15

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

余罪 2024-12-12 08:57:01

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;

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;
是伱的 2024-12-12 08:57:01

我希望有所帮助: 什么相当于使用 JDBC 时 MySQL 中 Oracle 的 REF CURSOR?

这是上面参考线程中提到的最新版本:
http://dev.mysql。 com/doc/refman/5.6/en/connector-j-reference-implementation-notes.html

它仍然说“MySQL不支持SQL游标,并且JDBC驱动程序不模拟它们,所以“setCursorName()”没有效果。”

I hope that helps: What is the equivalent of Oracle’s REF CURSOR in MySQL when using JDBC?

Here is the latest version of mentioned in thread above reference:
http://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-implementation-notes.html

It still says that "MySQL does not support SQL cursors, and the JDBC driver doesn't emulate them, so "setCursorName()" has no effect."

扭转时空 2024-12-12 08:57:01

“将值列表返回给 Java 程序”。 MySql(和 Connector/J)支持存储过程的多个输出参数。如果这不是您想要的,并且您想要一个结果集,您可以在存储过程中执行 SELECT 操作,此 SP 返回一个结果集,您可以使用 CallableStatement.executeQuery() 读取该结果集

"Return The list of values back to Java Program". MySql (and Connector/J) supports multiple output parameter for stored procedures. If this is not what you want, and you want a result set instead, you can do a SELECT inside your stored procedure and this SP returns a result set, that you can read e.g with CallableStatement.executeQuery()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文