我正在使用 postgreSQL。我正在尝试从表中获取所有外键。这是我目前正在使用的方法。
public String getFKeyData(String tableName, int i) throws SQLException {
DatabaseMetaData dm = connection.getMetaData();
ResultSet rs = dm.getImportedKeys(null, null, tableName);
while (rs.next()) {
fkTableData = rs.getString(i);
}
return fkTableData;
}
这段代码可以工作,但它只能获取最后一个外键,如果表中只有一个外键,这很好,但这不符合我的需求。我在网上查看的所有示例都与此非常相似,并且只提供一个外键作为输出。
目前我只是在按下按钮时打印数据。
System.out.println(databaseConnection.getFKeyData(tableName,3));
System.out.println(databaseConnection.getFKeyData(tableName,4));
System.out.println(databaseConnection.getFKeyData(tableName,8));
3 获取导入外键的表。 4 获取导入的主键列的名称。 8 获取外键列的名称。
如果有人可以提供帮助,我将不胜感激。
即使你的 while 循环迭代整个ResultSet
,该函数将仅返回 FK 约束中的最后一列,因为在每次迭代中您都会覆盖上一次迭代的值 (fkTableData = rs.getString(i);
)。顺便说一句:`fkTableData 实际上应该是方法的局部变量,而不是实例变量。
你的函数应该返回一个List<String>
not a String
.
另外:您正在打电话getImportedKeys()
每列一次在结果集中。这是极其低效的。如果您使用的是 Oracle,您会立即注意到这一点,因为在那里检索 FK 信息非常慢(Postgres 在访问系统目录时要快得多)。
As getImportedKeys()
为每个 FK 返回一行column您还需要收集属于一个单一约束定义(即一个父/子表组合)的所有行。
可能最好的办法是定义一个类PkDefinition
存储所有涉及的列和涉及的表名,并让您的函数返回List<PkDefinition>
以避免多次调用同一结果集行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)