2

我想使用 java DatabaseMetaData 获取外键并尝试过。
但我只有外键引用 pk 列,无法引用唯一列。
我尝试使用 getCrossReference()、getImportedKeys() 模式和相同的结果。

这是我的代码,数据库是 Oracle11g。

    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();

该表有两个外键(一个是引用 pk 列,另一个是引用唯一列)但我只有一个日志。
有什么错误吗?
谢谢。

4

1 回答 1

0

要获得引用唯一列,您必须在 getString 中使用 PKCOLUMN_NAME

 rset.getString("PKCOLUMN_NAME");

这是完整的代码:

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("PKCOLUMN_NAME");      
    System.out.println("  "+column_name+" reference to "+ pk_table+"("+constraint_name+")");             
}
rset.close();
于 2018-10-23T08:51:48.067 回答