0

質問を編集しました: データベースのすべてのテーブルの外部キーを配列リスト Fkeys に格納しようとしています。既存のテーブルの外部キー (存在する場合) を取得するメソッド getFK があります。

public ArrayList Fkeys = new ArrayList();
public ArrayList Vec = new ArrayList();

public ArrayList getFK () {
    try {

        /* Database connection */

       DBConnection connect = new DBConnection();
       connect.DBConnect();
       Connection con = connect.con;
       /* Getting some infos regarding keys*/
       DatabaseMetaData metadata = con.getMetaData();
       ResultSet clefs = metadata.getImportedKeys(null, null, "persons");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);


    clefs = metadata.getImportedKeys(null, null, "departments");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);
}

これを実行すると、[[ ], [ ]] という結果が得られます。これは、persons と departments の 2 つのテーブルに外部キーがないためです。しかし、これらの行を3つの外部キーを持つテーブルの学生に関するメソッドに追加すると

clefs = metadata.getImportedKeys(null, null, "students");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);

次の結果が得られます: [[id, person, depp], [id, person, depp], [id, person, depp]] [[id, person, depp], [ ], [ ]] 私が間違っているのは何ですか?Vec の内容が Fkey のすべての位置に格納されるのはなぜですか?

4

2 に答える 2

1

このループは毎回同じものを追加しているようです...alist

    while(keys.next()) {
          alist.add(clefs.getString("FKCOLUMN_NAME"));  
    }

これが問題なのかどうかはわかりません (何clefsが問題なのか教えてくれません!) ... しかし、私には非常に疑わしいように見えます。

于 2013-08-06T01:38:47.333 に答える
0

Setsを確認してください。それらはリストに似ていますが、オブジェクト内で一意になる機能があります。つまり、次の場合:

Set<Integer> intSet = new HashSet<Integer>()
intSet.add(1);
intSet.add(1);
for (Integer i : intSet) {
     System.out.println(i);
}

最終的な出力は次のようになります。

1

セットは、同じセット内に複数の同一オブジェクトを許可しません。

また、ArrayList を宣言するときは、それぞれがどのような ArrayList であるかに注意してください。そうしないと、IDE から怒鳴られるはずですが、デフォルトで Object になっていると思います。Set/List に 3 つのフィールドが必要な場合は、カスタム モデル オブジェクトを用意し、次のように宣言することをお勧めしますList<CustomModelObject> listOfObjects = new ArrayList<CustomModelObject>();(Set の例が必要な場合は、上記の例を参照してください)。

于 2013-08-06T19:52:06.627 に答える