【问题标题】:How do I iterate over a result set and add values to objects?如何迭代结果集并向对象添加值?
【发布时间】:2019-12-04 18:08:39
【问题描述】:

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

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

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);
    }
}

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

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

你有一个例外。

[Ljava.lang.StackTraceElement;@13edc840

【问题讨论】:

    标签: java sql eclipse


    【解决方案1】:

    要遍历 ResultSet,请使用以下代码:

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

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

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

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

    【讨论】:

    • 谢谢,看起来不错。但是,当我这样做时(List&lt;Pair&lt;String, String&gt;&gt; list = new ArrayList&lt;&gt;(); while (rs.next()) { list.add(new Pair(rs.getString("propertyname"), rs.getColumn("propertyvalue"))); }),我得到 The method getColumn(String) is undefined for type ResultSet
    • 我的错误,getColumn是错误的方法名,我会编辑我的答案
    • 好的,我之前尝试用字符串替换 Column 但现在它给了我错误构造函数 Pair(F, S) 不可见
    • 我以 Pair 作为示例类,你可以使用任何你想要的数据结构作为列表的类型,如果你愿意,可以包括 String[]
    • 哦,天哪,我是个白痴:D 无论如何,使用 Pair 所在的 String[] 告诉我 String 类型不是通用的;它不能用参数 参数化,并希望我删除参数
    猜你喜欢
    • 2017-10-25
    • 2021-06-30
    • 2017-05-11
    • 1970-01-01
    • 2016-01-17
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多