2017-02-05 5 views
0
public void selectStudent() throws SQLException{ 
    try{ 
     con= this.getConnection(); 
     if(con!=null){ 
      // Create and execute an SQL statement that returns some data. 
      String SQL = "SELECT * FROM dbo.Student"; 
      stmt = con.createStatement(); 
      rs = stmt.executeQuery(SQL); 

      // Iterate through the data in the result set and display it. 
      while (rs.next()) { 
       for(int i=0;i<=5;i++){ 
         data[rs.getRow()][i]=rs.getString(i+1); 
       } 
      } 
      closeConnection(); 
     }else System.out.println("Error: No active Connection"); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

今後、テーブル(swingUI)で使用するために、JDBC SQLクエリの結果を2次元オブジェクト配列に追加します。 残念ながら、上記のコードはうまくいきません。理由はわかりません。結果をデータオブジェクトに保存する際にエラーが発生します。JDBCからの結果セットを2次元テーブルにロード

エラータイプが取得されるのはNullPointerExceptionです。

+0

どのようなタイプのデータを既に初期化しましたか? –

+0

基本的に単純なObject [] []データを作成しました。初期化されていません。 swingUIテーブルはそれをデータとして受け入れるため、Object [] []を使用しています。 – KONAKONA

答えて

1

私はあなたがこのようなオブジェクトがあると思う:それはあなたがこの配列で、あなたの結果を入れる前に、あなたはこのようにそれを初期化する必要がありますので、それを初期化されていないので、あなたがエラーNullPointerExceptionを取得することについては

Object[][] data; 

を:

data = new String[numberOfRow][6]; 
while (rs.next()) { 
    for(int i=0; i<=5; i++){ 
     data[rs.getRow()][i]=rs.getString(i+1); 
    } 
} 

EDIT

Object[][] data = {{"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, 
      {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}}; 

これ、あなたの属性の種類を定義するために、より多くの仕事、私は例えば新しいタイプを作成するために、あなたにお勧めします

public class TypeObject { 

    private String s1; 
    private String s2; 
    private String s3; 
    private String i1; 
    private boolean b1; 

    public TypeObject(String s1, String s2, String s3, String i1, boolean b1) { 
     this.s1 = s1; 
     this.s2 = s2; 
     this.s3 = s3; 
     this.i1 = i1; 
     this.b1 = b1; 
    } 

    //getters and setters 
} 

ので、代わりに使用し、Object[][]使用TypeObject[]、あなたが簡単に設定することができますがまたは、このようなあなたの属性を取得:

TypeObject[] data = new TypeObject[numberRow]; 
TypeObject d = new TypeObject(rs.getString("c1"), rs.getString("c2"), rs.getString("c3"), rs.getInt("c4"), rs.getBoolean("c5")); 

data[i] = d; 

だから、この方法の利点:

  • あなたはあなたトンに新しい列を追加することができますできるだけ簡単に新しい フィールドをTypeObjectクラスに追加することができます。
  • 必要に応じてコンストラクタを作成できます。
  • および
+0

さて、私たちのオブジェクトは次のように定義されています:Object [] [] data。私はオブジェクトがユニヴァーサルタイプの一種だと思った?テーブルチュートリアルでは、 オブジェクト[] []データ= {{"Kathy"、 "Smith"、 "スノーボーディング"、新しい整数(5)、新しいブール値(false)}、 { "John"、 "Doe"、 "ローイング"、新しい整数(3)、新しいブール値(true)} }; 配列に複数のデータ型を格納する必要があります。 – KONAKONA

+0

はい、このように使用している型に最初にオブジェクトをキャストすることができます: 'Object [] [] data = new String [6] [6];' –

+0

複数のデータ型が必要な場合はどうなりますか?私たちの例?このテーブルは、文字列、整数、ブール値の両方を一度に格納できます。 – KONAKONA

関連する問題