1

テーブルがあり、フレームを開くと、テーブルはその列とそれぞれのヘッダーをmysqlデータベースのテーブルから受け取ります。SQL データベース テーブルのすべての値をスイング テーブルに挿入するにはどうすればよいですか?? これが私のコードです...

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 は、テーブル名を含む静的変数です。ありがとうございました

4

1 に答える 1

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を置き換える方が簡単な場合があります。TableModelJTable

さらなる備考:

  • dtmはすでに に使用されているため、JTableイベント ディスパッチ スレッドでのみ更新する必要があります。ただし、データベース接続/クエリは通常「低速」であり、EDT では実行しないでください。addRowこれを回避するには、各呼び出しを 1 つの呼び出しにラップするか、バックグラウンド スレッドでSwingUtilities#invokeXXX新しいTableModelモデルを作成して EDT で一度にモデルを置き換えます。詳細については、Swing 同時実行のチュートリアルを参照してください。
  • finally ブロックで をclose忘れないでくださいResultSet
于 2012-11-18T10:52:15.573 に答える