ResultSetMetaData getTableName 返回空

Posted

技术标签:

【中文标题】ResultSetMetaData getTableName 返回空【英文标题】:ResultSetMetaData getTableName return empty 【发布时间】:2018-04-19 15:01:34 【问题描述】:

我正在尝试通过以下代码从 ResultSetMetaData 中获取 TableName:

 `Properties info = new java.util.Properties(); 
                    info.put ("user",this.username); 
                    info.put ("password",this.password); 
                    info.put ("ResultSetMetaDataOptions","1");
                    Connection conn = DriverManager.getConnection(this.url,info);

                    PreparedStatement preparedStatement = connection.prepareStatement(sql);
                                    ResultSet rs = preparedStatement.executeQuery();
                                    ResultSetMetaData metaData = rs.getMetaData();
                                    metaData.getTableName(0);
                                    for (int i = 1; i <= metaData.getColumnCount(); i++) 
                                        logger.info("Table Name : " + metaData.getTableName(i);)
                                    `

我点击这个链接:https://docs.oracle.com/cd/E13222_01/wls/docs91/jdbc_drivers/oracle.html#1075290

但是,getTableName 返回还是空的。

如何设置ResultSetMetaDataOptions? 如何使用其他方法选择 tableName?

【问题讨论】:

您使用的是哪个版本的 Oracle JDBC 驱动程序?您正在链接到非常旧的文档,我知道 Oracle 从更新的驱动程序中删除了一些元数据选项,因为它们的用处有限并且对性能的影响。还有你正在执行的查询是什么? 我的 ojdbc 版本:oracleojdbc611.2.0.3 和我的 sql 查询: select * from TABLE_A a , TABLE_B b where a.sameColumn = b.sameColumn; 【参考方案1】:

您链接的文档适用于非常旧的驱动程序。 Oracle JDBC 驱动程序文档的最新版本在Using Result Set Metadata Extensions 中明确指出:

oracle.jdbc.OracleResultSetMetaData 接口是 JDBC 2.0 兼容,但不实现 getSchemaNamegetTableName 方法,因为 Oracle 数据库不这样做 可行。

换句话说,您无法为 Oracle 获取此数据。

【讨论】:

以上是关于ResultSetMetaData getTableName 返回空的主要内容,如果未能解决你的问题,请参考以下文章

ResultSetMetaData getTableName 返回空

ResultSetMetaData getTableName 返回空字符串

???????????????ResultSetMetaData??????DBUtils???????????????

Oracle ResultSetMetaData getPrecision/getScale

在 mssql 的情况下 metadata.getTables 结果集为空

ResultSetMetaData中getColumnLabel和getColumnName的区别