1

SQL クエリからいくつかのレコードを追加したいのですが、出力が正しくありません。常に最後のレコードを返します。

正しいリストは次のとおりです。

ジョン

ニック

メアリー

ジョー

、しかし、常にジョーを返します。

これは、要素を追加する方法です。

public ArrayList<String[][]> getFiledArrayList()
{
   // ArrayList<String[][]> fieldsList = new  ArrayList<>();
    String[][] tempRow = new String[1][2];
    ResultSet result;

    String sql = "select id, name_of from field";
    result = database.exeQueryStatement(sql);
    try 
    {
        while(result.next())
        {
            tempRow[0][0] = result.getString("id");
           // System.out.println(tempRow[0][0]);
            tempRow[0][1] = result.getString("name_of");
           // System.out.println(tempRow[0][1]);
            fieldsList.add(tempRow);
            System.out.println(fieldsList.get(0)[0][1]);
        }
    } 
    catch (SQLException ex) 
    {
        Logger.getLogger(FieldManage.class.getName()).log(Level.SEVERE, null, ex);
    }

    return fieldsList;

idname_ofをテーブルに入れ、jComboBoxString[1][2]に表示したいと思います。name_of挿入して見name_ofたいid

FieldManage fieldmanage = new FieldManage();
   ArrayList<String[][]> listOfField;
   listOfField = fieldmanage.getFiledArrayList();
   String[] fields = new String[listOfField.size()];
   System.out.println(listOfField.get(0)[0][0]);
   for (int i=0; i<listOfField.size(); i++)
   {
        fields[i] = listOfField.get(i)[0][1];
        System.out.println(fields[i]);//test print show always joe!
    }
     jComboFields.setModel(new javax.swing.DefaultComboBoxModel(fields));

このコードは常に Joe を返します。

また、jcombo 要素とid.

4

3 に答える 3

6

を設定するときfieldsListに、同じオブジェクト ( tempRow) への参照を繰り返し追加します。ループが の内容を変更するとtempRow、以前に追加されたすべてのエントリも変更されます (それらは同じオブジェクトであるため)。

次の行をループ内に移動します。

String[][] tempRow = new String[1][2];
于 2012-11-05T12:19:06.347 に答える
2

オブジェクト値の配列を作成しようとしています。

使用ArrayList<String[][]>はこれを行う方法ではありません

クラスを作成する

public class Person {
    private long id;
    private String name;

    public long getId() {
         return id;
    }

    public void setId(long id) {
        self.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        self.name = name;
    }

}

次に、コードで....

ArrayList<Person> myPeople = new ArrayList<Person>();

Person p = new Person();
p.setName("mary");
p.setId(1);

myPeople.add(p);

配列とオブジェクト参照を理解するのに問題があることを考えると、ループやコレクションと組み合わせて多次元プリミティブ配列を使い始める前に言語を学んでください。

于 2012-11-05T12:33:34.513 に答える
1

次の行を移動します。

String[][] tempRow = new String[1][2];

while(result.next())ループの最初の行として。

何が起こっている:

ループの外に置くtempRowと、ループの 2 番目の反復子で同じ配列が変更されます。つまり、次の値で上書きされます。whileループの完了時に、fieldsListすべてのインデックスでのみ最後の要素が含まれます。

ループを 3 回実行すると、Mary が出力として表示されます。

于 2012-11-05T12:28:07.717 に答える