2014-03-06 53 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。对于像我这样无知的新手来说,这是一个不可思议的网站。非常感谢! –