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以更好地管理資源...
添加回答
舉報