尝试检索列名,但通过IBM JDBC驱动程序从元数据中获取列索引

问题描述

我正在为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驱动程序吗?

解决方法

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