【问题标题】:Can't get foreign key using JAVA DatabaseMetaData无法使用 JAVA DatabaseMetaData 获取外键
【发布时间】:2014-03-01 12:00:23
【问题描述】:

我想使用 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 列,另一个引用唯一列)但我只有一个日志。
有什么错误吗?
谢谢。

【问题讨论】:

  • 你试过getImportedKeys(null,null,tableName)吗?
  • @bellabax:谢谢 bellabax。我试过了,结果一样。
  • 现在,我想它是否只是用于 PK 的外键,但我找不到关于它的描述。 :

标签: java jdbc oracle11g foreign-keys database-metadata


【解决方案1】:

要获得引用唯一列,您必须在 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();

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多