简体   繁体   English

如何通过使用带有“ select”关键字的MySql存储过程来遍历ResultSet?

[英]How to iterate over ResultSet by using MySql Stored Procedure with “select” keyword?

here is my Java method: 这是我的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=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;

}

Here is stored procedure on MySql db: 这是MySql db上的存储过程:

    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;
    IF done THEN
      LEAVE read_loop;
    END IF;
    END LOOP;

    CLOSE cur1;

When i try to run the java code i keep getting "resultset is from UPDATE.No data" exception. 当我尝试运行Java代码时,我不断收到“结果集来自UPDATE.No data”异常。 I am new to stored procedures and i cant figure out what i am missing here. 我是存储过程的新手,我无法弄清楚我在这里缺少什么。

As Luiggi well mentioned you need to return the results , in your case i assume its o_id and o_name : 正如Luiggi所提到的,您需要返回结果,在您的情况下,我假设其为o_ido_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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM