gpt4 book ai didi

java - 无法使用数据库元数据检索数据库中存在的所有表属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:35 26 4
gpt4 key购买 nike

我正在尝试访问 databasemetadata 以检索其中存在的所有表。getTables 应返回 10 列的 ResultSet

当我尝试遍历 ResultSet 以获取所有列数据时,我得到了

Exception in thread "main" java.sql.SQLException: Invalid column index

我从第一行取前5列数据,然后出现异常打印第 6 列时,TYPE_CAT

相关代码:

DatabaseMetaData dbmd = connection1.getMetaData();
ResultSet rs = dbmd.getTables(null, null, null, new String[]{"TABLE"});
while(rs.next()){
for(int i=1;i<11;i++){
System.out.print(rs.getString(i)+" ");
}
System.out.println("");
}

最佳答案

看起来您使用的是非常旧的 JDBC 2 驱动程序,或者该驱动程序不符合 JDBC 3.0、4.0 和/或 4.1,因为没有规范要求的所有列。

尽管 JDBC 指定了结果集(至少)应返回的列,但实际上正确定义 ResultSet 及其值取决于驱动程序实现者。 JDBC“只是”一个规范和一组接口(interface),因此它实际上不能确保——在运行时——所有驱动程序都返回所有指定的列。有认证测试,但这些需要官僚障碍(开源)或大量资金 + 官僚障碍(商业),因此并非所有 JDBC 驱动程序实现者都愿意测试合规性。

在 JDBC 2 (Java 1.3) 中 DatabaseMetaData.getTables (链接到 Java 1.3 apidoc)只返回五列:

  1. TABLE_CAT String => table catalog (may be null)
  2. TABLE_SCHEM String => table schema (may be null)
  3. TABLE_NAME String => table name
  4. TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
  5. REMARKS String => explanatory comment on the table

而 JDBC 3.0 ( Java 1.4/Java 5 )、JDBC 4.0 ( Java 6 ) 和 JDBC 4.1 ( Java 7 ) 又定义了 5 个列:

  1. TABLE_CAT String => table catalog (may be null)
  2. TABLE_SCHEM String => table schema (may be null)
  3. TABLE_NAME String => table name
  4. TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
  5. REMARKS String => explanatory comment on the table
  6. TYPE_CAT String => the types catalog (may be null)
  7. TYPE_SCHEM String => the types schema (may be null)
  8. TYPE_NAME String => type name (may be null)
  9. SELF_REFERENCING_COL_NAME String => name of the designated "identifier" column of a typed table (may be null)
  10. REF_GENERATION String => specifies how values in SELF_REFERENCING_COL_NAME are created. Values are "SYSTEM", "USER", "DERIVED". (may be null)

您可能想检查是否有更新的驱动程序可用于您的数据库。

关于java - 无法使用数据库元数据检索数据库中存在的所有表属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789211/

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