Как проверить, если ResultSet пуст? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь запустить класс, только если запрос на выборку возвращает хотя бы строку.

Мой вызов функции запроса отмечен ниже:

results=thequery("SELECT `username`,`numberpoints` FROM `highscores` WHERE `username` = '"+name+"'");//send query that checks if username exist     
                if(!results.next()) {
                BallTrial trial = new BallTrial();
                }

thequery function:

public ResultSet  thequery(String query){

         PreparedStatement statement = null;
        ResultSet rs = null;

        Connection con=null;
        Statement st=null;
        try {
            con=DriverManager.getConnection("jdbc:mysql://localhost/scores","root","");

            statement = con.prepareStatement(query);

            rs=  statement.executeQuery();

            while(rs.next()){
                    System.out.println(rs.getString(1)+" "+rs.getString(2));

                    return rs;

            }}


        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("you have not accessed the data base");

        }

        return null;

    }

Я получаю исключение нулевого указателя в if(!results.next()) {, кто-нибудь может уточнить, в чем здесь моя ошибка?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы должны добавить условие проверки нуля перед вызовом next, условие должно быть настроено вокруг строк: results != null && !results.next()

1 голос
/ 12 февраля 2020

Вам необходимо внести пару изменений:

  1. Из метода thequery вернуть ResultSet (т.е. rs) вместо возврата null. Возвращение null вызовет NPE. Кроме того, удалите while(...), как это должно быть сделано вызывающей стороной, например,

    public ResultSet  thequery(String query){
    
     PreparedStatement statement = null;
     ResultSet rs = null;
    
     Connection con=null;
     Statement st=null;
     try {
         con=DriverManager.getConnection("jdbc:mysql://localhost/scores","root","");
         statement = con.prepareStatement(query);
         rs=  statement.executeQuery();
         return rs;
     catch (SQLException e) {
         e.printStackTrace();
         System.out.println("you have not accessed the data base");
         throw e;
     }
    }
    
  2. В методе вызывающей стороны проверьте, содержит ли ResultSet какие-либо записи, вызвав rs.next(), например: :

    results = thequery(..)
    if(!results.next()){
        BallTrial trial = new BallTrial();
    }
    
...