【问题标题】:Trying to Retrieve column name but gets column index from metadata via IBM JDBC driver试图检索列名,但通过 IBM JDBC 驱动程序从元数据中获取列索引
【发布时间】:2020-08-24 12:08:14
【问题描述】:

我正在使用用于 IBM DB2 Z/OS(版本 4.13.127)的 jdbc 驱动程序,并且我正在尝试从元数据中获取表信息。 我的行为与我的预期不同:我没有检索列名,而是获得了列索引。

        ds=new com.ibm.db2.jcc.DB2SimpleDataSource();
        ((com.ibm.db2.jcc.DB2BaseDataSource) ds).setServerName(ip);
        ((com.ibm.db2.jcc.DB2BaseDataSource) ds).setPortNumber(portNumber);
        ((com.ibm.db2.jcc.DB2BaseDataSource) ds).setDatabaseName(databaseName);
        ((com.ibm.db2.jcc.DB2BaseDataSource) ds).setDriverType(4);

        con = ds.getConnection(user, password);
        DatabaseMetaData metadata = con.getMetaData();

        rs = metadata.getTables(null, "MY_SCHEMA", "MY_TABLE", null);
        
        int columnsNumber = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            for (int i = 1; i <= columnsNumber; i++) {
                if (i > 1) System.out.print(",  ");
                String columnValue = rs.getString(i);
                System.out.print(columnValue + " " + rs.getMetaData().getColumnName(i));
            }
        }

结果打印在下面:

null 1,  MY_SCHEMA 2,  MY_TABLE 3,  TABLE 4,   5,  null 6,  null 7,  null 8,  null 9,  null 10

我期待getColumnName 方法返回字符串属性(table_name、schema_name、...)。 它是特定于 db2 jdbc 驱动程序的吗?

【问题讨论】:

  • 您是否尝试过改用getColumnLabel()getTables() 返回的结果集不受任何真实表的支持,也不是直接支持,因此 column 名称可能不存在,尽管标签可能存在。
  • 请编辑您的问题以添加缺失的事实 - 您连接到 Db2(Z/OS、i 系列、linux/unix/windows)的哪个平台?此外,您正在使用 V10.5 fixpack0 (GA) jdbc 驱动程序,该驱动程序不受支持。请使用当前的 jdbc 驱动程序版本(v11.5.4 或更高版本)重试。
  • 此驱动程序 (4.13.127) 来自非常旧的 Db2 版本 - 10.1 GA(即使没有修复)。例如,我无法用我的 4.25.1301 重现这样的结果。 DB2 JDBC Driver Versions and Downloads。您当前的 Db2 版本是什么?您可以尝试使用与您的版本相对应的 JDBC 驱动程序吗?
  • 那是驱动版本问题,谢谢!

标签: jdbc db2 websphere database-metadata


【解决方案1】:

有关使用 Db2 特定驱动程序属性 useJDBC4ColumnNameAndLabelSemantics 的信息,请参阅 this IBM technote

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多