1 回答
TA贡献1831条经验 获得超4个赞
你的tableView方法毫无意义。为什么要打开两个数据连接,在同一个表上运行两个不同的查询,然后尝试合并它们?
您还冒着泄漏资源(保持数据库连接打开)的风险,从长远来看这不会是健康的。
这个问题的简单答案是,正确使用 SQL。在尽可能少的语句中从您想要的表中查询您想要的列。例如...
public void tableView() throws SQLException, ClassNotFoundException {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
//Create new table model
DefaultTableModel tableModel = new DefaultTableModel();
try (Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/TESTTABLE", "me", "1234")) {
String sql = "SELECT DATA1, DATA2 FROM ME.SOMETABLE";
try (PreparedStatement ps = con.prepareStatement(sql)) {
try (ResultSet rs = ps.executeQuery()) {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
List<String> columnNames = new ArrayList<>(columnCount);
for (int column = 0; column < columnCount; column++) {
columnNames.add(rsmd.getColumnName(column + 1));
}
tableModel.setColumnIdentifiers(columnNames.toArray(new Object[columnNames.size()]));
while (rs.next()) {
Object row[] = new Object[columnCount];
for (int column = 0; column < columnCount; column++) {
row[column] = rs.getObject(column + 1);
}
tableModel.addRow(row);
}
}
} finally {
t.setModel(tableModel);
}
}
}
还可以查看try-with-resources以更好地管理资源...
添加回答
举报