2017-03-23 18 views
0

でIはMU JFrame、結果セットから行を追加しようとでJTableが挿入されているが、それはコードを以下に示すはjava.lang.ArrayIndexOutOfBoundsException:0> = 0スイング

Exception in thread "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 

を示しています。

String billSelect_Sql = "select bill.bill_id, transaction.date, bill.product_desc, bill.quantity, bill.rate, transaction.debt, transaction.crdt, transaction.closing_balance from bill, transaction where bill.user_id = transaction.user_id and bill.user_id = '"+uid+"';"; 
      Statement ST2=conn.createStatement(); 
      ResultSet RS2 = ST2.executeQuery(billSelect_Sql) 

      int rowCount = 0; 
      while(RS2.next()){ 

       billing_tab.getModel().setValueAt(RS2.getString("bill_id"), rowCount, 1); 
       billing_tab.getModel().setValueAt(RS2.getString("date"), rowCount, 2); 
       billing_tab.getModel().setValueAt(RS2.getString("product_desc"), rowCount, 3); 
       billing_tab.getModel().setValueAt(RS2.getInt("quantity"), rowCount, 4); 
       billing_tab.getModel().setValueAt(RS2.getDouble("rate"), rowCount, 5); 
       billing_tab.getModel().setValueAt(RS2.getDouble("debt"), rowCount, 6); 
       billing_tab.getModel().setValueAt(RS2.getDouble("crdt"), rowCount, 7); 
       billing_tab.getModel().setValueAt(RS2.getDouble("closing_balance"), rowCount, 8); 
       rowCount = rowCount+1; 
      } 

     }catch(ClassNotFoundException | SQLException | NumberFormatException e){ 
      JOptionPane.showMessageDialog(null, e); 
      System.out.println(e); 
     } 

billing_tabは、jframeのmy jTableの変数名です。 時点でエラーを表示:

billing_tab.getModel().setValueAt(RS2.getString("bill_id"), rowCount, 1); 

は、私はこのコードを追加するために何かを見逃したのか?

+0

コードを追加してください。 –

+0

どのようにして配列をインスタンス化することができますか? – yashpandey

+0

あなたのテーブルに十分な行がないと思います。イテレーション時にテーブルの行数を増やすだけです。 –

答えて

1

最初に、すべての変数名(すなわち、RS2、ST2)は大文字で始めるべきではありません。それから、名前ももっとわかりやすいはずです。ほとんどの変数名は正しいものの、すべてではありません。一貫してください!結果から行を追加しようと

は、あなたのモデルが空であるので、変更するデータがない

billing_tab.getModel().setValueAt(RS2.getString("bill_id"), rowCount, 1); 
    billing_tab.getModel().setValueAt(RS2.getString("date"), rowCount, 2); 
    billing_tab.getModel().setValueAt(RS2.getString("product_desc"), rowCount, 3); 
    billing_tab.getModel().setValueAt(RS2.getInt("quantity"), rowCount, 4); 
    billing_tab.getModel().setValueAt(RS2.getDouble("rate"), rowCount, 5); 
    billing_tab.getModel().setValueAt(RS2.getDouble("debt"), rowCount, 6); 
    billing_tab.getModel().setValueAt(RS2.getDouble("crdt"), rowCount, 7); 
    billing_tab.getModel().setValueAt(RS2.getDouble("closing_balance"), rowCount, 8); 
    rowCount = rowCount+1; 

を設定します。 setValueAt(...)メソッドを使用してモデルにデータを追加しようとしないでください。このメソッドは、モデル内の既存のデータを「変更する」ためのものです。

代わりに、新しいデータ行を追加する必要があります。したがって、コードは次のようになります。

Vector<Object> row = new Vector<Object>(); 
row.addElement(RS2.getString("bill_id")); 
row.addElement(RS2.getSTring("date")); 
... 
billing_tab.getModel().addRow(row); 
関連する問題