如何在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 |
+------+-------+
答案 0 :(得分:-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 ;