2013-02-16 1 views
0

Java 프로그램에서 mysql 커서 값을 가져 오는 방법. 저장 프로 시저에서 mysql 커서 값을 가져 오는 방법

이 내 simlpe 자바 프로그램이 위의 저장 프로 시저

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(); 
    } 
} 

} 위의 자바 프로그램의

출력을 읽기 위해 내 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; 

입니다

sid number of rows fetched = name 6 

하지만 sid와 sname의 값을 표시하고 싶습니다.

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

[mysql]로 태그가 붙어있다. 나는 문제가 mysql쪽에 있다고 생각한다. – user000001

+0

@ user000001 자바 코드가 맞다. –

+0

테스트 없이는 말할 수 없습니다. 그러나 출력 결과에 따르면 결과 집합은'SELECT '행 수 fetched =', row_count;의 출력으로 채워져있는 것처럼 보입니다. 이로 인해 문제는 저장 프로 시저에 있다고 믿게됩니다. 나는 틀릴 수 있었다. 내 SQL 지식은 제한되어 있습니다. – user000001

답변

-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 ;