无法使用JAVA DatabaseMetaData获取外键

时间:2014-02-05 07:08:57

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

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

这是我的代码,DB是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列,另一个是引用唯一列)但是我只有一个日志。
有什么错误吗? 感谢。

1 个答案:

答案 0 :(得分: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();