我正在使用数据库和 GUI 在 NetBeans 8 中执行 java 项目。当我搜索数据库并将找到的值添加到 JTable 时,出现问题:所有值仅添加到 JTable 的第一列,而我需要添加它们分别到相应的列。我尝试了 getColumnCount() 它也给了我 1 意味着我只有一列。如何将数据库值添加到JTable的相应列中?
我已经尝试了建议的所有填充功能 here
我的代码:
jTable1 = new javax.swing.JTable();
String sql = "SELECT (flight_id, plane_name, dep_city, arival_city, date_month, date_day, eclassnumberofseats, bclassnumberofseats, fclassnumberofseats) FROM flight "
+ "WHERE (dep_city = '" + SearchFlight.getFromCity() + "' AND "
+ "arival_city = '" + SearchFlight.getToCity() + "' AND "
+ "date_month = '" + SearchFlight.getMonth() + "');";
PreparedStatement stat = conn.prepareStatement(sql);
ResultSet rs = stat.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs)
);
jScrollPane1.setViewportView(jTable1);
SearchFlight是一个GUI类,它的方法返回在GUI中获取的字符串。 DbUtils.resultSetToTableModel(rs)是net.proteanit.sql.DbUtils中的一个方法;
因此,预计数据将填充到 9 列,但实际上是将所有数据填充到一列中。
最佳答案
SELECT ( ... )
必须是
SELECT ....
<小时/>
并且更好地按预期使用PreparedStatement。否则SQL injection仍然是可能的。 try-with-resources 会在所有情况下关闭这些东西。
String sql = "SELECT flight_id, plane_name, dep_city, arival_city, date_month, "
+ "date_day, eclassnumberofseats, bclassnumberofseats, fclassnumberofseats "
+ "FROM flight "
+ "WHERE dep_city = ? AND "
+ "arival_city = ? AND "
+ "date_month = ?";
try (PreparedStatement stat = conn.prepareStatement(sql)) {
stat.setString(1, SearchFlight.getFromCity());
stat.setString(2, SearchFlight.getToCity());
stat.setString(3, SearchFlight.getMonth());
try (ResultSet rs = stat.executeQuery()) {
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
}
}
关于java - 从 postgresql 填充 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33937015/