[英]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
所有外鍵。
但是,在查看了getCrossReference
的Oracle JDBC驅動程序API之后,似乎Oracle驅動程序並未指定將列出引用唯一鍵的外鍵。 我嘗試了一下,可悲的是,似乎沒有辦法僅使用純JDBC API來獲取所有外鍵的列表。 您只能獲取引用主鍵的外鍵列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.