【发布时间】: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