Java 如何使用MySql存储过程对ResultSet进行迭代;选择";关键词?
以下是我的Java方法:Java 如何使用MySql存储过程对ResultSet进行迭代;选择";关键词?,java,mysql,stored-procedures,resultset,callable-statement,Java,Mysql,Stored Procedures,Resultset,Callable Statement,以下是我的Java方法: public static List<Company> selectCompanies() { List<Company> companies=new ArrayList<Company>(); CallableStatement cs = null; Connection conn = null; String url = "jdbc:mysql://localhost:3306/java?user
public static List<Company> selectCompanies() {
List<Company> companies=new ArrayList<Company>();
CallableStatement cs = null;
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/java?user=root&password=root";
try {
conn = DriverManager.getConnection(url);
cs = conn.prepareCall("{call select_companies()}");
ResultSet rs=cs.executeQuery();
while(rs.next()){
Company company=new Company();
company.setId(rs.getInt(1));
company.setName(rs.getString(2));
companies.add(company); }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
cs.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return companies;
}
当我尝试运行java代码时,我不断得到“resultset来自UPDATE.No data”异常。我不熟悉存储过程,我不知道这里缺少了什么。正如Luiggi所提到的,您需要返回结果,在您的情况下,我假设它的o_id
和o_name
:
CREATE PROCEDURE select_companies ()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE o_id SMALLINT;
DECLARE o_name VARCHAR(52);
DECLARE cur1 CURSOR FOR SELECT ID,NAME FROM b_company;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO o_id, o_name;
SELECT o_id, o_name;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cur1;
正如Luiggi所提到的,您需要返回结果,在您的例子中,我假设它的o_id
和o_name
:
CREATE PROCEDURE select_companies ()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE o_id SMALLINT;
DECLARE o_name VARCHAR(52);
DECLARE cur1 CURSOR FOR SELECT ID,NAME FROM b_company;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO o_id, o_name;
SELECT o_id, o_name;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cur1;
问题不在Java端,而在MySQL存储过程中。您永远不会将游标或结果集返回到外部世界。问题不在Java端,而在MySQL存储过程中。您永远不会将光标或结果集返回到外部世界。非常感谢您的帮助。非常感谢您的帮助。