2012-11-18 26 views
1

我有一個表,並在一個框架的開放表上從mysql數據庫的表中收到它的列和它們各自的標題。我怎樣才能將所有的值從sql數據庫表中插入到擺動表? 這裏是我的代碼...如何將數據插入到列的動態定義(數據從mysql數據庫)的擺動表?

DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel(); 
String query1=null; 
try { 
    query1="select * from "+Variables.table+";"; 
    ResultSet rsft=st.executeQuery(query1); 
    Object o[]=new Object[x]; 
    while(rsft.next()) {     
    for(int i=1;i<=x;i++){ 
     o[i-1]=rsft.getString(i); 
    } 
    dtm.addRow(o); 
    } 
} catch(Exception e) { 
    System.out.println(e.getMessage()); 
} 

在上面的代碼中,x是一個整數,表示在SQL表柱的側向承載力的數量。 而Variables.table是一個包含表名的靜態變量。 謝謝

回答

1

問題是getColumnCount仍然會返回0,儘管您添加了一些行。請致電setColumnCount

您可以在源代碼中進行驗證,或者只是執行快速測試,例如,

import javax.swing.table.DefaultTableModel; 

public class DefaultTableModelDemo { 
    public static void main(String[] args) { 
    DefaultTableModel defaultTableModel = new DefaultTableModel(); 
    defaultTableModel.addRow(new Object[]{"Test", "Test"}); 
    System.out.println("defaultTableModel.getRowCount() = " + 
     defaultTableModel.getRowCount()); 
    System.out.println("defaultTableModel.getColumnCount() = " + 
     defaultTableModel.getColumnCount()); 
    } 
} 

給出了下面的輸出

defaultTableModel.getRowCount() = 1 
defaultTableModel.getColumnCount() = 0 

可能更容易只創建一個數據載體,然後再創建一個新的TableModel並更換JTable現有TableModel

而且備註:

  • 由於dtm已經用於JTable,你應該只在事件指派線程更新。但是數據庫連接/查詢通常「很慢」,不應該在EDT上執行。您可以通過在SwingUtilities#invokeXXX調用中將每個addRow調用打包或在後臺線程上構建新的TableModel並在EDT上一次性替換模型來避免此問題。有關更多信息,請參閱Swing concurrency tutorial
  • 不要忘記close在該ResultSet finally塊
相關問題