使用JDBC从Oracle获取唯一索引的所有外键

时间:2014-05-16 16:08:21

标签: java jdbc foreign-keys unique-constraint

我有一个表,其中包含另一个表中Unique列的外键。我可以看到外键是正确定义的,但当我尝试使用JDBC使用下面提到的代码时,我没有看到它。我已经验证,当外键引用另一个表的主键时,这是有效的。

所以我的问题是“如何使用JDBC获取Oracle中唯一索引列的外键?”

ResultSet rset = databaseMetaData.getImportedKeys(null, dbName, tableName);

while(rset.next()){
  String column_name = rset.getString("FKCOLUMN_NAME");
  String pk_table = rset.getString("PKTABLE_NAME");
  String pk_column = rset.getString("PKCOLUMN_NAME");
  String constraint_name = rset.getString("FK_NAME");

  System.out.println(column_name + " ==> " + pk_column + "(TBL:" + pk_table + ")(CN:" + constraint_name + ")");
}
rset.close();

其他信息:有人建议使用getCrossReference,但问题在于我需要预先知道参照约束的源表和目标表,而我不需要。 此外,我正在寻找一个纯jdbc api解决方案,不使用任何特殊的Oracle架构或查询。我的应用程序处理多个数据库,但我试图将它隐藏在一个通用的jdbc api层后面。

2 个答案:

答案 0 :(得分:0)

我建议您使用目录视图。在Oracle目录视图中,您将找到描述Oracle数据库的所有元数据:

http://www.oracle.com/pls/db92/db92.catalog_views

例如,要获取某个表中的所有外键:

select * from all_constraints constraints where constraints.table_name = 'MY_TABLE' and constraints.constraint_type = 'R'

这里有更深刻,更好的答案:

Oracle get foreign keys

答案 1 :(得分:0)

使用JDBC DatabaseMetaData中的getCrossReference将是首选解决方案。使用null"%"作为parentTable参数将列出指定foreignTable的所有外键。

但是,在查看getCrossReference的{​​{3}}后,似乎Oracle驱动程序未指定将列出引用唯一键的外键。我试了一下,遗憾的是,似乎没有办法只使用纯JDBC API来获取所有外键的列表。您只能获取引用主键的外键列表