gpt4 book ai didi

java - 如何获取 derby 数据库中的外键列表

转载 作者:行者123 更新时间:2023-12-02 07:28:28 25 4
gpt4 key购买 nike

我试图确保在我的 derby 数据库中创建了外键,第一步是检查外键是否存在并应用于正确的列。

我一直在检查像 sys.sysforeignkeys 和 sys.sysconstraints 这样的系统表,但是当我通过各种 sys* 表从一个表到另一个表追踪 id 时,我似乎不知道如何在 sys 中映射一行.sysforeignkeys 插入列名。

我必须执行什么 SQL 查询来检查以下 ALTER TABLE 是否已执行?

ALTER TABLE ClipPoints ADD FOREIGN KEY(clipName) REFERENCES LABELS(label)

这需要是一个完全自动化的过程,无需用户干预。

最佳答案

使用字典 View :

以下是在 Derby 中查询外键的方法:

SELECT
fc.constraintname,
ft.tablename,
fs.schemaname,
fg.descriptor,
pc.constraintname,
ps.schemaname
FROM sys.sysconstraints fc
JOIN sys.sysforeignkeys f ON f.constraintid = fc.constraintid
JOIN sys.sysconglomerates fg ON fg.conglomerateid = f.conglomerateid
JOIN sys.systables ft ON ft.tableid = fg.tableid
JOIN sys.sysschemas fs ON ft.schemaid = fs.schemaid
JOIN sys.sysconstraints pc ON pc.constraintid = f.keyconstraintid
JOIN sys.sysschemas ps ON pc.schemaid = ps.schemaid
WHERE fc.type = 'F'

您缺少的表是 sys.sysconglomerates 表。它包含一个如下所示的“描述符”:

DESCRIPTOR
----------
BTREE (1)

不幸的是,使用 SQL 将该描述符解码为列索引有点棘手,因此您可能需要求助于 Java 才能找到相关列。

使用 JDBC DatabaseMetaData

对于 Derby,使用 JDBC 标准 DatabaseMetaData API 可能更合理,该 API 由 Derby JDBC 驱动程序实现:

try (ResultSet rs = connection.getMetaData().getImportedKeys(null, null, "CLIPPOINTS")) {

while (rs.next()) {
System.out.println(
" FK_NAME = " + rs.getString("FK_NAME")
+ ", FKTABLE_NAME = " + rs.getString("FKTABLE_NAME")
+ ", FKCOLUMN_NAME = " + rs.getString("FKCOLUMN_NAME"));
}
}

关于java - 如何获取 derby 数据库中的外键列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33487500/

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