如何确定查询是否正常工作?

时间:2019-05-30 11:20:05

标签: java mysql jdbc

我看不到是否有错误,因为该应用程序未提示任何内容。我想从数据库中获取一个值并将其放在一个变量中,以便以后在需要时显示。

我对编程还不是很陌生,我曾经看过一些教程,但是由于导师在做事上有他们自己的方法,我似乎无法正确地完成某些事情。

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 :(得分:0)

基本上,这是应该使用调试器的明确案例。我不知道您使用的是哪种编程环境,但是所有大型环境(IntelliJ,Eclipse,Netbeans)都支持内置的调试。在这种情况下,您应该在bot(answer);行上设置一个断点,这样,您可以确定其中是否有任何数据,检查bot功能是否正常运行等。

此外,如上所述,如果没有获得堆栈跟踪,则代码将正确返回值。也许数据库中的相关字段为空?同样,使用调试器可以为您提供帮助。

这里是一个示例教程,用于在Eclipse中调试Java程序,以备不时之需:https://www.vogella.com/tutorials/EclipseDebugging/article.html

答案 1 :(得分:0)

如果不执行resultet.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);
}

我想bot方法会打印字符串。