2017-12-10 7 views
0

私はクエリ用のクラスとGUI用のクラスを持っています。だから私のGUIクラスで、私はこれらの公共メンバーがあります。クエリクラスで、私はこの方法を持っているが2つのクラスを使用してResultSetからjTableを取り込むことができません

model = (DefaultTableModel) table.getModel(); 
table = new JTable(); 

を:

public void selectPassengers(int rows) { 
     PreparedStatement pst = null; 
     ResultSet rs = null; 

     String query = "SELECT * FROM brs.passenger"; 
     try { 
      pst = con.prepareStatement(query); 
      rs = pst.executeQuery(); 

      String[] attributes = new String[9]; 

      GUI rg = new GUI(); 

      while (rs.next()) { 
       attributes[0] = rs.getString(1); 
       attributes[1] = rs.getString(2); 
       attributes[2] = rs.getString(3); 
       rg.model.insertRow(rg.table.getRowCount(), new Object[] { 
         attributes[0], attributes[1], attributes[2]}); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

それは例外を挿入したり投げていません。それは何もしません。私がwhile-loopのコンソールに印刷しようとしたにもかかわらず、適切なデータが印刷されます。データベースと接続は正常です。

クエリを実行した後にGUIクラスで何かする必要がありますか?

ショートカットは大丈夫です!私は最も簡単な方法を探しています。

答えて

0
model = (DefaultTableModel) table.getModel(); 
table = new JTable(); 

上記のコードは意味がありません。

まず、「テーブル」変数からモデルを取得します。

次に、新しいテーブルを作成します。新しいテーブルを作成すると、新しいモデルが作成され、元のモデルを参照しなくなります。

モデルのデータを更新すると、テーブルの現在のモデルではなく、古いモデルが更新されます。

基本的なコードは次のようになります。今

DefaultTableModel model = new DefaultTableModel(...); 
JTable table = new JTable(model); 

あなたは、モデル内のデータを更新する場合、テーブルとモデルが同期しています。

+0

ありがとうございました。しかし、動作しませんでした。 DefaultTableModel(..)のパラメータとして行と列の数を指定しようとしました。何も変わりません。私の挿入コードは正しいですか? –

+0

なぜデータベースロジックに新しいGUIを作成していますか? 1)フレームを作成する、2)JTableを作成する必要があります。テーブルをJScrollPaneに追加して、スクロールペインをフレームに追加します。 3)。次に、データの行をテーブルモデルに挿入するメソッドがあります。最初にこのロジックをハードコードされたデータで処理します。それでは、データベースコードについて心配してください。 – camickr

+0

また、9項目の配列を作成した後、3項目だけを配列に追加するのはなぜですか?なぜ、データをモデルに追加するために2番目の配列を作成するのですか? insertRow()メソッドを使用する必要はありません。 addRow(...)メソッドを使うだけで、自動的に行がデータベースの最後に追加されます。ハードコードされたデータをテーブルに読み込む最初のステップでさらに助けが必要な場合は、問題を示す適切な[mcve]を投稿してください。まず、コードを再構成してより論理的なものにする必要があります。 – camickr

関連する問題