如何使用Derby JDBC获取外键引用?

时间:2015-06-11 12:56:58

标签: java sql database jdbc derby

我有用

创建的表格
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))

那么在COUNTRY.NAME表上执行SELECT查询后,如何获得外键的Table.Column(PERSON)引用? 是否可以通过JDBC ResultSet ResultSetMetaData 或类似的东西进行操作?
事实上,我需要知道:

  • 任一列都有外键约束;
  • 约束值列表。

好吧,我在SELECT上做了SYS.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.*系统表?

1 个答案:

答案 0 :(得分:0)

可能的决定:

Interface

应该将... 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(); } ... 下拉列表用作每列约束(当然使用FK)。