繁体   English   中英

使用 ResultSet 从带有 SQL 的 Java DB 中获取数据

[英]Getting data From a java DB with SQL Using ResultSet

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

'结果集未打开。 不允许操作“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());
    }
}

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

您的代码中有几个问题。

  1. 在调用方法next()之前,不能调用接口java.sql.ResultSet方法getString() next() 首先调用方法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. 一旦您不再需要它们,您应该关闭ConnectionStatement 在上面的代码中,我使用了try-with-resources

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM