2014-03-06 56 views
1
public static DefaultTableModel localQuery(String searchTerm){ 

    List<String[]> result = new ArrayList<String[]>(); 
    String[] rowResult = new String[7]; 
    Vector<String[]> rows = new Vector<String[]>(); 
    Vector<String> columnNames = new Vector<String>(); 
    Statement stmt = null;  
    try { 
     stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(searchTerm); 
     while(rs.next()){ 
      rowResult = new String[13]; 

      String currentId= rs.getString("CurrentId"); 
      String manufacturer = rs.getString("Constructor"); 
      String type = rs.getString("ACType"); 
      String series = rs.getString("Series"); 
      String index = rs.getString("KeyNo"); 
      String operator = rs.getString("Operator"); 
      String baseCountry = rs.getString("Home_Country"); 
      String baseAirport = rs.getString("Home_Airfield"); 
      String cn = rs.getString("Con"); 
      String lineNo = rs.getString("LineNum"); 
      String hex = rs.getString("Hexcode"); 
      String selcal=rs.getString("Selcal"); 
      String acName = rs.getString("ACName"); 

      rowResult[0] = (currentId); 
      rowResult[1] = (manufacturer); 
      rowResult[2] = (type); 
      rowResult[3] = (series); 
      rowResult[4] = (operator); 
      rowResult[5] = (baseCountry); 
      rowResult[6] = (baseAirport); 
      rowResult[7] = (cn); 
      rowResult[8] = (lineNo); 
      rowResult[9] = (hex); 
      rowResult[10] = (selcal); 
      rowResult[11] = (acName); 
      rowResult[12]= (index); 
      result.add(rowResult); 

     } 

    columnNames.add("Reg."); 
    columnNames.add("Manufacturer"); 
    columnNames.add("Type"); 
    columnNames.add("Series"); 
    columnNames.add("Operator"); 
    columnNames.add("Home Country"); 
    columnNames.add("Home Airfield"); 
    columnNames.add("C/N"); 
    columnNames.add("Line #"); 
    columnNames.add("Hex"); 
    columnNames.add("Selcal"); 
    columnNames.add("Aircraft Name"); 
    columnNames.add(""); 





     rs.close(); 
     stmt.close(); 


    //Convert from List<String[]> to a suitable vector for resultTable... Help!!! 


    DefaultTableModel resultTable = new DefaultTableModel(rows, columnNames); 
    return resultTable; 

    } 

嗨!我想這個方法返回一個DefaultTableModel在JTable上使用。我努力將從數據庫中提取的數據格式化爲模型友好的格式。對我來說很簡單,這是我第三天任何編程!爲DefaultTableModel創建矢量

感謝提前:)

回答

1
  1. 你可以列標題使用動態ResultSetMetaData ← API鏈接

    ResultSetMetaData rsMeta = resultSet.getMetaData(); 
    int numberOfCols = rsMeta.getColumnCount(); 
    Vector<String> columnNames = new Vector<>(); // your columns names 
    for (int i = 1; i <= numberOfCols; i++){ 
        columnsNames.add(rsMeta.getColumnName(i)); 
    } 
    
  2. 你並不需要額外的VectorList的數據。首先用構造函數參數(Vector/Object[] colNames, int rows)聲明你的DefaultTableModel。然後,只需使用方法addRowDefaultTableModel

    DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
    
    while (resultSet.next()) { 
        String data1 = resultSet.getString(1); 
        String data2 = resultSet.getString(2); 
        ... 
        Object[] rowData = new Object[] { data1, data2, ... }; 
        model.addRow(rowData); 
    } 
    
    return model; 
    
  3. 或者,而不是2,以確保你得到列的正確數量,你可以使用Vector的while環和環通內部列數據。

    DefaultTableModel model = new DefaultTableModel(columnNames, 0); 
    
    while (resultSet.next()) { 
        Vector<String> row = new Vector<>(); 
        for (int i = 1; i <= numberOfCols; i++) { 
         row.add(resultSet.getString(i)); 
        } 
        model.addRow(row); 
    } 
    
    return model; 
    

查看更多方法和構造看DefaultTableModel API

+0

感謝您的@peeskillet,似乎在說我沒有得到錯誤的感覺是工作。我現在的下一個問題是:在我的Jtable定義的類上,我爲它分配了一個空的DefaultTableModel(爲簡單起見,tableModel),然後運行此方法並執行tableModel = returnModelFromThisMethod。我的理解是,表格現在應該刷新並顯示我的方法的結果嗎?請原諒我的無知,但我正在學習。這樣做夠用還是需要某種表監聽器? –

+0

不應該做的是聲明不同的表模型。 'DefaultTableModel model2 = localQuery(...);'然後設置表的模型..'table.setModel(model2);' –

+1

它工作!!!!它還活着!!!哈哈,你太棒了@peeskillet。對於像我這樣無知的新手來說,這是一個不可思議的網站。非常感謝! –