0

実行時にデータベースから名前を取得するコンボボックスを作成したいと考えています。そのため、空の文字列配列を作成しましたが、arrayindexoutofbound という例外がスローされます。初期化の間違いかと思います……。

            String s[]=new String[0];
            {
                 try
                {
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  Connection con =DriverManager.getConnection("jdbc:odbc:project","sa","123456");
                  Statement stmt= con.createStatement();
                  ResultSet rs=stmt.executeQuery("SELECT Name FROM company");
                  i=0;
                  while(rs.next()) {        
                        s[i]=rs.getString(1);
                        i++;
                  }
                }
                catch(Exception ex)
                {
                    JOptionPane.showConfirmDialog(f,ex);
                }
                cb=new JComboBox(s);
            }
4

4 に答える 4

10

配列は、1 つの型の固定数の値を保持するコンテナー オブジェクトです。配列の長さは、配列の作成時に確立されます。作成後、その長さは固定されます。0 要素を保持する配列を作成しています。

String s[]=new String[0]; //<< intialized with length 0

ArrayindexoutOfBoundsException最初の要素にアクセスしようとするとスローされますs[0]

配列が不正なインデックスでアクセスされたことを示すためにスローされます。インデックスが負であるか、配列のサイズ以上です。

配列のサイズは0であるため、 index へのアクセス中に例外がスローされます0

理解のための配列の基本的な図の下。

ここに画像の説明を入力

長さ の配列で10、インデックスは から0まで9です。

配列自体を宣言するときに、データ構造が格納する必要がある要素の数がわからないためです。あなたのケースでは動的Collectionを使用する方が良いでしょう。おそらくArrayListのようなListの実装のいずれかです。

List<String> s = new ArrayList<String>();
while(rs.next())
{
   s.add(rs.getString("NAME")); // using column name instead of index "1" here
}

推奨読書:

  1. Java 配列に関する Oracle のチュートリアル
  2. リスト vs 配列 - いつ何を使うべきか
于 2013-07-27T07:25:21.403 に答える
1

私はまた、データベースからデータを取得してコンボボックスに追加するプロジェクトに取り組んでいます。単純にすることをお勧めします。配列を作成する必要はありません。単に次のように書くだけです。

 try
            {
              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
              Connection con = DriverManager.getConnection("jdbc:odbc:project","sa","123456");
              Statement stmt= con.createStatement();
              ResultSet rs=stmt.executeQuery("SELECT Name FROM company");
              cb=new JComboBox();
              while(rs.next()) {   
                    cb.addItem(rs.getString(1));
              }
            }
            catch(Exception ex)
            {
                JOptionPane.showConfirmDialog(f,ex);
            }
            

注:最初にデータを保存してからコンボボックスに追加する場合は、配列の代わりにベクターを使用する必要があります。

新しい馬鹿

于 2013-07-29T20:36:17.203 に答える
1

長さ 0 の配列を作成しました。配列を使用する必要があるメンバーの数がわかっている場合、わからない場合は ArrayList を使用することをお勧めします

于 2013-07-27T07:37:18.457 に答える