0

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;

これは、上記のストアド プロシージャを読み取るための私の単純な 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  |
+------+-------+
4

1 に答える 1

-2

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 ;
于 2014-08-11T12:55:24.657 に答える