【发布时间】:2013-08-06 01:29:32
【问题描述】:
我编辑了问题: 我正在尝试将数据库所有表的外键存储在 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,人,德普],[],[]] 我做错了什么?为什么Vec的内容存储在Fkeys的所有位置?
【问题讨论】:
-
谱号在哪里声明,在哪里填充?
-
很明显,这不是真正的代码,并且严重怀疑它与真实代码的匹配程度足以进行适当的分析。请提供真实的 SSCCE。
-
您似乎在每次调用
getFK时都返回了相同的ArrayList实例(它在方法之外声明为常规类成员)。使数组列表成为getFK的适当局部变量。 -
现在编辑的都是同一个方法,但我还是不明白出了什么问题。
标签: java arraylist storage redundancy