存储过程能否返回结果集?

8
我有一个名为employee的表,其中包含他的id、姓名和电话号码。我正在使用MySQL作为我的数据库。我正在使用Java Swing进行开发。我现在正在使用Java通过名称搜索员工表(我已经在我的Java页面中使用了like子句)。
现在我需要在存储过程中实现该功能。这可行吗?如果可行,我们如何在Java代码中获取结果集?
现在我已经编写了以下存储过程:
BEGIN
     SELECT * FROM employee where empName like '%su%'
END

能提供示例代码就更好了,谢谢。

3个回答

2

首先,您应编写MySQL存储过程,为LIKE发送参数。

CREATE PROCEDURE simpleproc (param1 CHAR(20))
BEGIN
SELECT * FROM employee where empName like param1;
END

然后从Java程序中,您可以使用此代码来使用存储过程:
CallableStatement cstmt = con.prepareCall("{call simpleproc(?)}");
cstmt.setString(1, "%su%");
ResultSet rs = cstmt.executeQuery();

1

执行存储过程时,如果它执行了多个语句,则可能会返回多个ResultSet对象和/或更新计数。

您可以使用CallableStatement来执行存储过程,然后使用getResultSet()getUpdateCount()获取正确的结果。对于多个结果集/语句,您需要调用getMoreResults()来遍历存储过程的结果。

对于这种简单情况,您只需要调用getResultSet()一次并处理它即可。


0

可以的。存储过程甚至可以返回多个结果集。

DELIMITER $$ -- recognized by mysql client but not phpmyadmin

CREATE PROCEDURE prc_test()
BEGIN
        SELECT  *
        FROM    employee
        WHERE   empName LIKE '%su%';
END;
$$

DELIMITER ;

CALL prc_test(); -- to call

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接