java - 如何迭代结果集并向对象添加值?

标签 java sql eclipse

在我的主类中,我有一个打开的 swing JFrame,让用户选择一些选项,然后调用另一个类。该类使用提供的信息向 SQL 发出查询并获取一些值。我现在想将它们添加到 JFrame 上的表中。

看起来在表中显示数据的唯一方法是传入二维对象数组。显然,要做到这一点,我需要将值添加到二维对象数组中。到目前为止,这就是我所拥有的:

try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(url, decodedUsername, decodedPassword);
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);
    rs = stmt.executeQuery(query);

    if (rs != null) {
        rs.last();    // moves cursor to the last row
        size = rs.getRow(); // get row id 
    }

    for (int i = 0; i < size; i++) {
        //column is the column name in sql
        column = rs.getString("propertyname");
        //value is the corresponding value
        value = rs.getString("propertyvalue");

        data[0][i] = column;
        data[1][i] = value;

        System.out.println(data);
    }
}

上面显示了连接到数据库,然后获取行数,然后尝试将值添加到对象数组数据。

我的预期是它打印数据库中的值,实际是这样的:

你有一个异常(exception)。

[Ljava.lang.StackTraceElement;@13edc840

最佳答案

迭代 ResultSet ,使用以下代码:

ResultSet rs = ...
while (rs.next()) {
    // do something
}

您的代码的问题在于,在您的循环中,您正在递增 i ,并且向数组中的许多元素添加数据,但您没有迭代 ResultSet 中的指针。 ResultSet.next()返回true如果还有剩余行,并且递增存储在 ResultSet 中的指针.

而不是使用 Object[]要存储数据(需要索引参数),您可以使用 List<Object>并调用list.add() 。例如,

ResultSet rs = ...
List<Pair<String, String>> list = new ArrayList<>();
while (rs.next()) {
    list.add(new Pair(rs.getString("column1"), rs.getString("column2")));
}

关于java - 如何迭代结果集并向对象添加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57219316/

相关文章:

java - Oracle 行锁用于相同数据时的更新

java - Android 上导致 NPE 的 runOnUiThread 和 sendKeys 调用序列

sql - 日历的 Postgres 查询

eclipse - Eclipse 的 SVNKit

java - 使用java将pdf文档转换为word文档

java - Kotlin中如何设计减少冗余类?

SQL Select Distinct 与条件

sql - 在 SQL Server 和 Oracle 中获取今天日期的兼容语法

Android adb (OSX Lion) 无法识别 Galaxy Nexus、Jelly Bean

java - DownloaderClientMarshaller.Proxy 重写父类(super class)函数