【问题标题】:JDBC Error After end of result set结果集结束后出现 JDBC 错误
【发布时间】:2014-07-16 21:35:38
【问题描述】:

我创建了一个方法,它应该从我的数据库中返回一个单元格(它是一个 varchar 变量)并将其分配给一个字符串。然后调用另一个方法,该方法采用该字符串并将变量分配给用户对象,然后将其添加到数组列表中。 SQL 查询语句在 PHPMyAdmin 中运行良好,但在 Java 中,该方法一直运行到 System.out.println("Getting Followers...");

然后由于某种原因它停止工作。我不明白,因为我已经使用这种方法的代码在程序的其他部分检索不同的变量而没有任何问题,但是每当我尝试从数据库中获取这个变量时,它都无法正常工作。

提前感谢您的帮助。

public ArrayList<User> returnFollowers(){

    ArrayList<User> userArray = new ArrayList<User>();

    User user = new User();

    try{
        Class.forName("com.mysql.jdbc.Driver");
        statement = connection.createStatement();
        result = statement.executeQuery("SELECT Follower FROM User_Followers WHERE Username = 'Apple123'");

        if(!result.next()){

            System.out.println("No results found");
        }
        else{
            while(result.next()){
            }
                System.out.println("Getting followers...");
                String userID = result.getString("Follower");

                user.createUser(userID);
                userArray.add(user);
            }
        }
    catch(ClassNotFoundException error){
        System.out.println("Error: " + error.getMessage());
    }
    catch(SQLException error){
        System.out.println("Error " + error.getMessage());
    }       
    finally{
        if(connection != null){
            try{
                connection.close();
            }
            catch(SQLException ignore){

            }
        }

        if(statement != null){
            try{
                statement.close();
            }
            catch(SQLException ignore){
            }

        }
    }

    return userArray;

}

【问题讨论】:

  • 如果问题得到解决,然后通过接受最佳答案关闭线程。访问StackOverflow tour

标签: java mysql jdbc


【解决方案1】:
  • 第一个while 循环为空

  • 第二个问题是你已经在if 子句中调用的result.next()

    现在您在while 子句中再次调用result.next(),因此第一条记录已被跳过

    在这种情况下,在do-while 中更改while 循环。

这样做:

   if(!result.next()){
        System.out.println("No results found");
   }else{
        do{
            System.out.println("Getting followers...");
            String userID = result.getString("Follower");

            user.createUser(userID);
            userArray.add(user);
        }while(result.next());
   }

Read more...

【讨论】:

    【解决方案2】:

    您在while 循环范围之外调用result.getString("Follower"),因此没有更多可用记录。在这里只使用一个while循环可能会更好

    【讨论】:

    • 谢谢。我觉得自己像个白痴,我没有看到它,但我真的很感谢你的帮助。
    • 第一条记录总是被跳过。不是吗?
    猜你喜欢
    • 2020-09-09
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2011-11-21
    相关资源
    最近更新 更多