Dái*_*ire 2 java postgresql jdbc foreign-keys
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但它只能得到我最后一个外键,如果表中只有一个,但这不符合我的需要.我在网上看到的所有例子与此非常相似,只提供一个外键作为输出.目前我只是在按下按钮时打印数据.
System.out.println(databaseConnection.getFKeyData(tableName,3));
System.out.println(databaseConnection.getFKeyData(tableName,4));
System.out.println(databaseConnection.getFKeyData(tableName,8));
Run Code Online (Sandbox Code Playgroud)
3获取从中导入外键的表.4获取导入的主键列的名称.8获取外键列的名称.如果有人可以提供帮助,我会非常感激.
即使你的while循环遍及整个ResultSet,该函数也只会返回FK约束中的最后一列,因为在每次迭代时都会覆盖前一次迭代的值(fkTableData = rs.getString(i);).顺便说一下:`fkTableData实际上应该是方法的局部变量,而不是实例变量.
你的函数应该返回a List<String>而不是a String.
另外:您getImportedKeys() 为 ResultSet中的每个列调用一次.这是非常低效的.如果您使用的是Oracle,您会立即注意到,因为检索FK信息的速度非常慢(Postgres在访问系统目录时要快得多).
当getImportedKeys()为每个FK 列返回一行时,您还需要收集属于一个约束定义的所有行(即,对于一个父/子表组合).
可能最好的方法是定义一个PkDefinition存储所有相关列和所涉及的表名的类,并使函数返回List<PkDefinition>以避免对同一结果集行进行多次调用.
| 归档时间: |
|
| 查看次数: |
9901 次 |
| 最近记录: |