【问题标题】:Get all foreign keys using JDBC使用 JDBC 获取所有外键
【发布时间】:2013-09-10 10:36:13
【问题描述】:

我正在使用 postgreSQL。我正在尝试从表中获取所有外键。这是我目前使用的方法。

public String getFKeyData(String tableName, int i) throws SQLException {
    DatabaseMetaData dm = connection.getMetaData();
    ResultSet rs = dm.getImportedKeys(null, null, tableName);
    while (rs.next()) {
        fkTableData = rs.getString(i);
    }
    return fkTableData;
}

此代码有效,但它只能让我得到最后一个外键,如果表中只有一个外键,这很好,但这不符合我的需要。我在网上看到的所有示例都与此非常相似,并且只给出一个外键作为输出。 目前我只是在按下按钮时打印数据。

System.out.println(databaseConnection.getFKeyData(tableName,3));
System.out.println(databaseConnection.getFKeyData(tableName,4));
System.out.println(databaseConnection.getFKeyData(tableName,8));

3 获取导入外键的表。 4 获取导入的主键列的名称。 8 获取外键列的名称。 如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

    标签: java postgresql jdbc foreign-keys


    【解决方案1】:

    即使您的 while 循环遍历整个 ResultSet,该函数也只会返回 FK 约束中的最后一列,因为在每次迭代时,您都会覆盖上一次迭代 (fkTableData = rs.getString(i);) 的值。顺便说一句:`fkTableData 实际上应该是方法的局部变量,而不是实例变量。

    您的函数应该返回 List<String> 而不是 String

    另外:您正在为 ResultSet 中的每一列调用一次getImportedKeys()一次。这是极其低效的。如果您使用的是 Oracle,您会立即注意到这一点,因为那里检索 FK 信息非常慢(访问系统目录时 Postgres 快得多)。

    由于getImportedKeys() 为每个 FK 返回一行,您还需要收集属于一个单一约束定义的所有行(即一个父/子表组合)。

    最好的办法可能是定义一个类PkDefinition,它存储所有涉及的列和涉及的表名,并让您的函数返回List<PkDefinition>,以避免多次调用同一结果集行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多