有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    但是,在查看了getCrossReferenceOracle JDBC driver API之后,似乎Oracle驱动程序没有指定将列出引用唯一键的外键。我试过了,遗憾的是,似乎无法仅使用纯JDBCAPI获得所有外键的列表。只能获取引用主键的外键列表