在我的主类中,我有一个打开的 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/