2015-11-26 157 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