JDBC错误结果集结束后

时间:2014-07-16 21:35:38

标签: java mysql jdbc

我创建了一个方法,该方法应该从我的数据库返回一个单元格(它是一个varchar变量)并将其分配给一个String。然后调用另一个方法,该方法接受String并将变量分配给User对象,然后将其添加到数组列表中。 SQL查询语句在PHPMyAdmin中工作正常,但在Java中,该方法一直运行到System.out.println之后(“获取关注者......”);

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

提前感谢您的帮助。

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;

}

2 个答案:

答案 0 :(得分:2)

  • 第一个while循环为空

  • 第二个问题是result.next()您已在if子句中调用过。

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

    在这种情况下,

    更改while中的do-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...

答案 1 :(得分:0)

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