Значение ResultSet, когда оператор SQL имеет неправильный синтаксис? - PullRequest
0 голосов
/ 31 декабря 2018

Я использую MySQL.Как видите, оператор SQL неверен на SELECT.Итак, мне интересно, какое значение имеет rs?Я надеюсь получить совет.Я вам очень благодарен;

String sql = "SELCT * FROM user WHERE username = '" + username + "' and password = '" + password + "'";
ResultSet rs = stm.executeQuery(sql); 

Ответы [ 4 ]

0 голосов
/ 31 декабря 2018

Во-первых, оператор не будет выполнен, поэтому следующее выполнение зависит от того, как вы собираетесь обрабатывать это исключение.Таким образом, если возникает исключение и если вы обрабатываете также, в ResultSet будет нулевое значение, потому что ему не присвоено значение.

0 голосов
/ 31 декабря 2018

Будет возвращено исключение с сообщением типа синтаксической ошибки.

0 голосов
/ 31 декабря 2018

Самый простой способ найти - это отладить ваш код, поместив точки останова в код и исследуя / отслеживая значения переменных.Большинство IDE имеют эти функции отладки.В дополнение к ответу Эллиотта Фриша, если я реструктурирую ваш код, как показано ниже, то в случае неверного / неправильного SQL управление переходит в блок catch, и вы видите, что значение rs остается null.

public void executeQuery(Connection conn, String username,String password) {
    String sql = "SELCT * FROM user WHERE username = '" + username + "' and password = '" + password + "'";
    ResultSet rs = null;
    Statement stm = null;
    try {
        stm = conn.createStatement();
        rs= stm.executeQuery(sql);
        while(rs.next()) {
         //Extract ResultSet here as per needed logic 
        }
    } catch (SQLException e) {
     // Your control comes here if query is wrong , put a break point at below line & examine value of rs
        e.printStackTrace();
    }finally {
        // Close resources not needed after this method call like - result sets , statements & connection  
    }

    }
0 голосов
/ 31 декабря 2018

Не будет никакого значения, потому что Statement.executeQuery(String) выдаст SQLException.Как сказано в связанном Javadoc,

Возвращает: ResultSet объект, который содержит данные, полученные с помощью данного запроса;never null

Throws: SQLException - если возникает ошибка доступа к базе данных, этот метод вызывается для закрытого Statement, данный оператор SQL создает что-либо, кроме одногоResultSet объект, метод вызывается на PreparedStatement или CallableStatement

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...