簡體   English   中英

如何從存儲過程中獲取MySQL游標值

[英]How to fetch mysql cursore value from stored procedure

如何在Java程序中獲取mysql游標值。

這是我的mysql存儲過程

delimiter //
CREATE PROCEDURE cursor_student()
BEGIN
DECLARE row_count INT DEFAULT 0;
DECLARE exit_flag INT DEFAULT 0;
DECLARE sid varchar(30);
DECLARE sname varchar(50);
DECLARE rst CURSOR FOR 
    SELECT sid, sname FROM student WHERE class = '11th';

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET exit_flag=1;

OPEN rst;
fetch_loop: LOOP

    FETCH rst INTO sid, sname;  
    IF exit_flag THEN 
        LEAVE fetch_loop;
    END IF;
    SET row_count = row_count +1;
END LOOP;
CLOSE rst;  
SELECT 'number of rows fetched =', row_count;
END;

這是我上面讀取的存儲過程的simlpe Java程序

import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class StoredProcedure {

public static void main(String[] args) {
    Connection dbConnection = null;
    String url = "jdbc:mysql://localhost:3306/";
    String db = "test";
    String driver = "com.mysql.jdbc.Driver";
    ResultSet rs = null;
    CallableStatement callableStatement = null;
    String getDBUSERCursorSql = "{call cursor_student}";
    try {
        Class.forName(driver);
        dbConnection = DriverManager.getConnection(url + db, "root", "");
        try {

            callableStatement = dbConnection.prepareCall(getDBUSERCursorSql);


            callableStatement.executeUpdate();

            rs = callableStatement.getResultSet();

            while (rs.next()) {


                System.out.println("sid "+rs.getString(1)  +"  name  "+rs.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

上面的java程序的輸出是

  sid number of rows fetched =  name  6

但我想顯示sid和sname的值

+------+-------+
| sid  | sname |
+------+-------+
| 1    | asdf  |
| 2    | dff   |
| 3    | gggg  |
| 4    | tttt  |
| 5    | mmmm  |
| 6    | .uyy  |
+------+-------+

我認為您的SP有問題。

您能否根據此SP示例進行更改? 我沒有執行,但我認為是

DROP PROCEDURE IF EXISTS  mysql_cursor_example $$
CREATE PROCEDURE mysql_cursor_example ( IN in_name VARCHAR(255) )
BEGIN
  -- First we declare all the variables we will need
  DECLARE l_name    VARCHAR(255);
  -- flag which will be set to true, when cursor reaches end of table
  DECLARE exit_loop BOOLEAN;         

  -- Declare the sql for the cursor
  DECLARE example_cursor CURSOR FOR
    SELECT name status_update
    FROM employees
    WHERE name = name_in;

  -- Let mysql set exit_loop to true, if there are no more rows to iterate
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;

  -- open the cursor
  OPEN example_cursor;

  -- marks the beginning of the loop
  example_loop: LOOP

    -- read the name from next row into the variable l_name
    FETCH  example_cursor INTO   l_name;

    -- check if the exit_loop flag has been set by mysql, 
    -- if it has been set we close the cursor and exit 
    -- the loop
    IF exit_loop THEN
        CLOSE example_cursor;
        LEAVE example_loop;
    END IF;

  END LOOP example_loop;
END $$

DELIMITER ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM