2015-11-26 130 views
0

我在使用数据库和GUI在NetBeans 8中执行java项目。当我搜索数据库并将找到的值添加到JTable时,问题出现:所有值仅添加到JTable的第一列我需要他们分别添加到相应的列。我试过getColumnCount(),它也给了我1意味着我只有一列。如何将数据库值添加到JTable的相应列?从postgresql填充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列,然后将所有数据填充到一列中。

回答

2
SELECT (...) 

必须

SELECT .... 

,更好的使用PreparedStatement如预期。否则SQL injection仍然是可能的。在所有情况下,尝试与资源关闭事物。

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

谢谢)它的作品。)这样一个愚蠢的错误。 –

+0

@SherzodElamanov,不要忘记单击复选标记以“接受”答案,以便人们知道问题已解决。 – camickr