2012-10-25 46 views
0

我使用JTable來顯示MySQL SELECT查詢的結果。 這樣一塊表型號代碼:JTable w/Mysql數據需要在連接上有組合框

public void setDataSource(ResultSet rs) throws Exception { 
    data.clear(); 
    columnNames.clear(); 
    columnTypes.clear(); 

    ResultSetMetaData rsmd = rs.getMetaData(); 
    int columnCount=rs md .getColumnCount(); 
    for (int i=0; i<columnCount; i++) { 
     columnNames.add(rsmd.getColumnName(i+1)); 
     Classtype =Cl as s.forName(rsmd.getColumnClassName(i+1)); 
     columnTypes.add(type); 
     // Here I need to detect is it a joined column 
     // and if it is to set cell editor for this column to 
     // a comboBox w/ data from joined table 
    } 
    fireTableStructureChanged(); 
    while (rs.next()){ 
     ArrayListrow =new ArrayList(); 
     for (int i=0; i<columnCount; i++) { 
      if(columnTypes.get(i) == String.class) 
      row.add(rs.getString(i+1)); 
      else 
      row.add(rs.getObject(i+1)); 
     } 
     synchronized(data){ 
      data.add(row); 
      fireTableRowsInserted(data.size()-1,data .size()-1); 
     } 
    } 
} 

正如你所看到的一些列可能由JOIN操作得到,所以我需要檢測究竟是並設置其編輯器組合框W /從連接表可能值。 我認爲良好的手冊或關於關係數據庫的書籍和使用他們擺動也可以。謝謝!

回答

1

假設你有一個基表,比如說A,加入了多個其他表。您的要求是顯示來自連接表的列有些不同。

您可以嘗試ResultSetMetaData的getTableName()以獲取該列所屬的表的名稱。事情是這樣的:

int columnCount = resultSetMetaData.getColumnCount(); 
System.out.println("Total Columns: "+columnCount); 
for(int index = 1; index <= columnCount; index++){ 
    System.out.print("Column Name: "+resultSetMetaData.getColumnName(index)); 
    System.out.println("Table Name: "+resultSetMetaData.getTableName(index)); 
} 

既然你已經知道了基表的名稱,你可以隨時用它來比較,你看當前列是否屬於基表或沒有。

0

如果我明白了,你將加入兩個表格,它們之間有一對多關係。爲了簡化討論,讓我們假設你有一個名爲department的表和一個名爲employee的表。每個部門可以有0名或更多員工。我們希望表中的每一行都顯示一個部門和一個組合框來選擇員工。首先,直接將ResultSet傳遞給TableModel並不是一個好習慣。如果您的表旨在顯示部門數據,則您的表模型應接受部門對象的集合。

因此,您應該遍歷結果集並創建一個Department對象集合。每個部門對象可以有一個Employee對象的集合。當你建立你的集合時,你可以將它們傳遞給你的TableModel。

這本身不會給你一個組合框,但它會清理並分離你的顧慮。要使用組合框爲你的編輯器,你需要做的是這樣

TableColumn employeeColumn = table.getColumnModel().getColumn(someIndex); 

JComboBox comboBox = new JComboBox(); 
comboBox.addItem("Snowboarding"); 
comboBox.addItem("Rowing"); 
comboBox.addItem("Chasing toddlers"); 
comboBox.addItem("Speed reading"); 
comboBox.addItem("Teaching high school"); 
comboBox.addItem("None"); 
sportColumn.setCellEditor(new DefaultCellEditor(comboBox)); 

上面的代碼是從甲骨文的Java教程這裏採取以下:

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html