Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用MySql存储过程对ResultSet进行迭代;选择";关键词?_Java_Mysql_Stored Procedures_Resultset_Callable Statement - Fatal编程技术网

Java 如何使用MySql存储过程对ResultSet进行迭代;选择";关键词?

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

以下是我的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;

}
当我尝试运行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存储过程中。您永远不会将光标或结果集返回到外部世界。非常感谢您的帮助。非常感谢您的帮助。