繁体   English   中英

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

[英]Get All Foreign Keys to Unique indexes from Oracle using JDBC

我有一个表,该表的外键指向另一个表中的“唯一”列。 我可以看到外键已正确定义,但是当我尝试使用下面提到的使用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但是这样做的问题是,我需要事先知道引用约束的源表和目标表,而我不知道。 另外,我正在寻找一种不使用任何特殊Oracle模式或查询的纯jdbc api解决方案。 我的应用程序处理多个数据库,但我尝试将其隐藏在通用jdbc api层后面。

我建议您使用目录视图。 在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'

这里有一个更深,更好的答案:

甲骨文获得外键

getCrossReference从JDBC DatabaseMetaData使用getCrossReference 使用null"%"作为parentTable参数将列出指定的foreignTable所有外键。

但是,在查看了getCrossReferenceOracle JDBC驱动程序API之后,似乎Oracle驱动程序并未指定将列出引用唯一键的外键。 我尝试了一下,可悲的是,似乎没有办法仅使用纯JDBC API来获取所有外键的列表。 您只能获取引用主键的外键列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM