MySQL 存储过程未返回 Java 中的结果集可能是由于多种原因造成的。以下是一些基础概念、可能的原因以及解决方案。
假设我们有一个存储过程 get_users
,它返回一个用户列表:
DELIMITER //
CREATE PROCEDURE get_users(OUT user_list TEXT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE user_name VARCHAR(255);
DECLARE cur CURSOR FOR SELECT name FROM users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET user_list = '';
OPEN cur;
read_loop: LOOP
FETCH cur INTO user_name;
IF done THEN
LEAVE read_loop;
END IF;
SET user_list = CONCAT(user_list, user_name, ',');
END LOOP;
CLOSE cur;
-- Remove the trailing comma
SET user_list = LEFT(user_list, LENGTH(user_list) - 1);
END //
DELIMITER ;
使用 JDBC 调用存储过程并获取结果集:
import java.sql.*;
public class Main {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "username";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
CallableStatement stmt = conn.prepareCall("{call get_users(?)}");
stmt.registerOutParameter(1, Types.VARCHAR);
stmt.execute();
String userList = stmt.getString(1);
System.out.println("Users: " + userList);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
确保数据库 URL、用户名和密码正确无误。
确保执行存储过程的用户具有足够的权限。
通过确保存储过程正确设置输出参数,以及在 Java 代码中正确处理这些输出,通常可以解决 MySQL 存储过程未返回结果集的问题。同时,检查数据库连接配置和用户权限也是必要的步骤。
领取专属 10元无门槛券
手把手带您无忧上云