我编辑了这个问题: 我正在尝试将数据库的所有表的外键存储在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);
}
现在,当我执行此操作时,我得到了这样的结果:[[],[]]因为两个表人员和部门没有外键。 但是当我将这些行添加到关于具有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的所有位置?
答案 0 :(得分:1)
此循环似乎每次都向alist
添加相同的内容......
while(keys.next()) {
alist.add(clefs.getString("FKCOLUMN_NAME"));
}
我不能确定这是问题所在('因为你不告诉我们clefs
是什么!)......但它对我来说看起来很可疑。
答案 1 :(得分:0)
查看Sets,它们就像列表一样,但它们具有在对象内部唯一的能力。即如果你有:
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。如果你需要设置/列表中的3个字段,我建议使用自定义模型对象,并将其声明为List<CustomModelObject> listOfObjects = new ArrayList<CustomModelObject>();
(如果需要Set的示例,请参见上面的示例)