0

我编辑了问题:我正在尝试将数据库所有表的外键存储在 arraylist 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);
}

现在,当我执行此操作时,我得到以下结果: [[ ], [ ]] 因为两个表 person 和部门没有外键。但是当我将这些行添加到有关具有 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的内容存储在Fkeys的所有位置?

4

2 回答 2

1

这个循环似乎alist每次都在添加相同的东西......

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

我不能确定这就是问题所在(因为你没有告诉我们是什么clefs!)......但它看起来对我来说非常可疑。

于 2013-08-06T01:38:47.333 回答
0

查看Sets,它们就像 Lists 一样,但它们具有在对象内部唯一的能力。即,如果您有:

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

最终输出应该是:

1

集合不允许同一集合中有多个相同的对象。

另外,当您声明 ArrayLists 时,请务必注意每个 ArrayList 的类型,否则您的 IDE 应该对您大喊大叫,但我认为它默认为 Object。如果您需要 Set/List 中的 3 个字段并像这样声明它,我建议您使用自定义模型对象List<CustomModelObject> listOfObjects = new ArrayList<CustomModelObject>();(如果您需要 Set 示例,请参见上面的示例)

于 2013-08-06T19:52:06.627 回答