如何获得与德比JDBC外键引用?(How to get foreign key reference

2019-10-23 08:57发布

我已经表与创建

CREATE TABLE COUNTRY (NAME CHAR(16) PRIMARY KEY)
CREATE TABLE PERSON (NAME CAHR(32) PRIMARY KEY,
       CITIZENSHIP CHAR(16) CONSTRAINT CY_FK REFERENCES COUNTRY (NAME))

所以,我怎么能得到TABLE.COLUMN( COUNTRY.NAME的外键)引用我执行后SELECT上查询PERSON表? 是否有可能通过JDBC ResultSet,ResultSetMetaData 什么都做什么?
事实上,我需要知道:

  • 无论是列有一个外键约束;
  • 约束值的列表。

好吧,我没有SELECTSYS.SYSCONSTRAINTS但只有类型的约束(“P”,“F”,等等),但没有被引用的表名称。

更新

我发送查询,通过JDBC 数据库

PreparedStatement stmtDerbyDb = DriverManager.getConnection(dbConnectString).prepareStatement("SELECT * FROM \"" + dbTableOrView + "\"");
ResultSet rsltDerbyDb = stmtDerbyDb.executeQuery();
ResultSetMetaData rsmdDerbyDb = rsltDerbyDb.getMetaData();
...

所有的变量stmtDerbyDb,rsltDerbyDb,rsmdDerbyDb在进一步的代码中使用。 我需要知道:是否有可能通过JDBC来从dbTableOrView外键约束,不然我要查询SYS.*系统表不知何故?

Answer 1:

可能的决定:

...
Connection connTableView = DriverManager.getConnection("jdbc:Derby:database_name:create=false");
DatabaseMetaData dbmdTableView = connTableView.getMetaData();
ResultSet rsltTableConstraints = dbmdTableView.getImportedKeys(null, null, "PERSON");
PreparedStatement prstTableContents = connTableView.prepareStatement("SELECT * FROM PERSON");
ResultSet rsltTableContents = prstTableContents.executeQuery();
...
buildTableView(rsltTableContents);
rsltTableContents.close();
...
while (rsltTableConstraints.next()) {
    PreparedStatement prstConstraints = connTableView.prepareStatement("SELECT " + rsltTableConstraints.getString("PKCOLUMN_NAME") + " FROM " + rsltTableConstraints.getString("PKTABLE_NAME"));
    ResultSet rsltConstraintsForCol = prstConstraints.execute();
    ...
    setColumnConstraints(rsltConstraintsForCol, rsltTableConstraints.getString("FKCOLUMN_NAME"));
    ...
    rsltConstraintForCol.close();
    prstConstraints.close();
}
...

这是应该被用作ComboBox与约束每列(当然,FK)的下拉列表。



文章来源: How to get foreign key reference with Derby JDBC?