gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:31 26 4
gpt4 key购买 nike

我创建了表格

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))

那么,在对 PERSON 表执行 SELECT 查询后,如何获取外键的 Table.Column (COUNTRY.NAME) 引用呢?是否可以通过 JDBC ResultSetResultSetMetaData 或类似的东西来完成?
事实上,我需要知道:

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

嗯,我对 SYS.SYSCONSTRAINTS 执行了 SELECT,但只有约束类型(“P”、“F”等),但没有“引用表”名称。

更新

我通过 JDBC数据库发送查询

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

所有变量 stmtDerbyDbrsltDerbyDbrsmdDerbyDb 均在后续代码中使用。我需要知道:是否可以通过 JDBC 从 dbTableOrView 获取外键约束,或者我应该以某种方式查询 SYS.* 系统表吗?

最佳答案

可能的决定:

...
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)。

关于java - 如何使用 Derby JDBC 获取外键引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30781458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com