Как я могу определить, работает ли запрос? - PullRequest
1 голос
/ 30 мая 2019

Я не вижу, есть ли ошибка, потому что приложение ничего не запрашивает.Я хочу получить значение из базы данных и поместить его в переменную, которая будет отображаться позже, когда мне это понадобится.

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

public void selectQuery(String input) throws SQLException {
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");

        String USERNAME = "root";
        String PASSWORD = "root";
        String CONN_STRING =
            "jdbc:mysql://localhost:3306/javaddy?serverTimezone=UTC";
        Connection connection =
            DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);

        try {
            String q = "SELECT Inquiry_answer,Inquiry_question FROM inquiries WHERE Inquiry_question = '" + input + "'";
            Statement stmt = connection.createStatement();
            ResultSet res = stmt.executeQuery(q);
            String answer;
            answer = res.getString("Inquiry_answer");
            // /* there is no value returned here (I think) because after passing to
            // bot method, it doesn't print anything */
            bot(answer);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }

    } catch (ClassNotFoundException e) {
        System.out.println("Could not find the database driver " + e.getMessage());
    } catch (SQLException e) {
        System.out.println("Could not connect to the database " + e.getMessage());
    }
}

Я ожидаю получить значение из базы данных, но оно не возвращено.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Без выполнения resultset.next () вы не можете получить результат.

Правильный способ сделать это:

                ResultSet res = stmt.executeQuery(q);
                String answer;
                res.next();
                answer = res.getString("Inquiry_answer");
                // /* there is no value returned here (I think) because after passing to
                // bot method, it doesn't print anything */
                bot(answer);

или еще лучший способ поместить этот код в цикл как:

while (res.next())
{
  String answer = res.getString("Inquiry_answer");
  System.out.println(answer);
}

Полагаю, бот-метод печатает строку.

0 голосов
/ 30 мая 2019

По сути, это довольно четкий случай, когда вам следует использовать отладчик. Я не знаю, какую среду программирования вы используете, но все большие (IntelliJ, Eclipse, Netbeans) имеют встроенную поддержку отладки. В этом случае вам просто нужно установить точку останова на строке bot(answer);, которая Кстати, вы можете определить, есть ли там какие-либо данные, проверить, правильно ли работает функция бота и т. д.

Также, как указано выше, если вы не получаете трассировку стека, тогда код возвращает значение правильно. Может быть, соответствующие поля в базе данных пусты? Опять же, использование отладчика может помочь вам здесь.

Вот пример учебника по отладке программ Java в Eclipse на случай, если он вам нужен: https://www.vogella.com/tutorials/EclipseDebugging/article.html

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