【问题标题】:Getting data From a java DB with SQL Using ResultSet使用 ResultSet 从带有 SQL 的 java DB 获取数据
【发布时间】:2020-11-02 12:18:41
【问题描述】:

我创建了一个方法来使用 SQL 从 Java 数据库中获取值并将信息存储在 ResultSet 中,然后使用 while 循环将信息存储在 RentSendItem 中并将所有这些项目存储在ArrayList 称为 sendList 但是当我尝试运行它时,它给了我错误:

'结果集未打开。不允许操作“getString”。验证自动提交是否关闭'

这是我的课:

public void getDataFromDB() {
    System.out.println("Wordk");
    //connecting
    Connection connection = null;
    Statement statement = null;
    try {
        System.out.println("1");
        connection = DriverManager.getConnection(url, username, password);
        statement = connection.createStatement();
        ResultSet name = statement.executeQuery("SELECT firstname,surname FROM CUSTOMER");
        ResultSet titles = statement.executeQuery("Select Title,Category From ADDDVD ");
        System.out.println(name.getString("firstname"));
        System.out.println("2");
        while (name.next()) {
            String fullName = name.getString("firstname") + " " + name.getString("surname");
            RentSendItem item = new RentSendItem(name.getString("firstname") + name.getString("surname"), titles.getString("Category"), titles.getString("title"));
            sendList.add(item);
        }
        System.out.println("3");
    } catch (Exception e) {
        System.out.println("Error" + e.getMessage());
    }
}

所以只想知道我做错了什么,这门课会做我想做的事。如果您能帮助我,我将不胜感激。

【问题讨论】:

  • 在下方评论并检查 System.out.println(name.getString("firstname"));
  • 在行上方的评论中尝试一次,让我知道你会得到什么。

标签: java sql


【解决方案1】:

你的代码有几个问题。

  1. 在调用方法next()之前,不能调用接口java.sql.ResultSet的方法getString()。首先调用方法next(),如果该方法返回“true”,则可以调用方法getString()。
  2. 您还需要在titles 上调用方法next()。
  3. 您不能在同一行的同一列上调用 getString() 两次。

将下面的代码与您的代码进行比较。

public void getDataFromDB() {
    System.out.println("Wordk");
    // connecting
    try (Connection connection = DriverManager.getConnection(url, username, password);
         Statement statement = connection.createStatement()) {
        System.out.println("1");
        ResultSet name = statement.executeQuery("SELECT firstname,surname FROM CUSTOMER");
        ResultSet titles = statement.executeQuery("Select Title,Category From ADDDVD ");
        System.out.println("2");
        while (name.next()) {
            String firstname = name.getString("firstname");
            String surname = name.getString("surname");
            String fullName = firstname + " " + surname;
            if (titles.next()) {
                RentSendItem item = new RentSendItem(fullName,
                                                     titles.getString("Category"),
                                                     titles.getString("title"));
                sendList.add(item);
            }
        }
        System.out.println("3");
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

另外,以下不是问题,而是建议。

  1. 在catch 块中,通常最好打印整个堆栈跟踪,而不仅仅是错误消息。
  2. 一旦您不再需要它们,您应该关闭Connection 和Statement。在上面的代码中,我使用了try-with-resources

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多