как исправить эту функцию всегда возвращать ложь - PullRequest
1 голос
/ 09 мая 2019

Я написал эту функцию для проверки идентификатора, имя которого задано в базе данных, но оно всегда возвращает false:

public boolean checking(String name,String Id_number,String tableName){
    if(conn==null){
        System.out.println("db is not connect,is gonna connect");
        connect();
    }
    try{
        Statement stmt=conn.createStatement();
        ResultSet rs=stmt.executeQuery("select * from "+tableName+" where name ="+"'"+name+"'");
        if(Id_number.equals(rs.getString(4))){
            return true;
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    return false;
}

Как я могу это исправить

1 Ответ

1 голос
/ 09 мая 2019

Когда создается ResultSet, оно указывает на строку «перед первым» результата. Вам нужно попытаться переместить его в первый ряд (используя next()), а затем сравнить его содержимое. Если такой строки нет, вы можете вернуть false:

public boolean checking(String name, String id_number, String tableName){
    if (conn==null) {
        connect();
    }

    try{ 
        Statement stmt = conn.createStatement();

        // Side note: Depending on where the parameters come from, this may be vulnarable
        // to an SQL Injection attack.
        // Make sure you properly validate/sanitize the arguments
        ResultSet rs = stmt.executeQuery("select * from " + tableName + " where name = " + "'"+name+"'");

        // Check if there's even such a row:
        if (!rs.next()) {
            return false;
        }

        // Check the id number
        return Id_number.equals(rs.getString(4));

    } catch(Exception e){
        e.printStackTrace(); // Or some proper handling...
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...