我有用
创建的表格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.*
系统表?
答案 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)。