Java DatabaseMetaData.getColumns返回同义词的空结果集
元数据上的方法Java DatabaseMetaData.getColumns返回同义词的空结果集,java,oracle,jdbc,Java,Oracle,Jdbc,元数据上的方法getColumns()返回同义词的空结果集(对于表和视图,它正确返回列列表) 这发生在Oracle11gExpress上,并使用最新的OracleJDBC驱动程序(11.2.3) 其他SQL服务器也会发生这种情况吗 欢迎提供解决此问题的任何帮助/想法。请使用此方法 PreparedStatement pt=coneection.preparestatement("select * from table_name"); Resultset rs=pt.executeQuery();
getColumns()
返回同义词的空结果集(对于表和视图,它正确返回列列表)
这发生在Oracle11gExpress上,并使用最新的OracleJDBC驱动程序(11.2.3)
其他SQL服务器也会发生这种情况吗
欢迎提供解决此问题的任何帮助/想法。请使用此方法
PreparedStatement pt=coneection.preparestatement("select * from table_name");
Resultset rs=pt.executeQuery();
ResultsetMetaData rsmd=rs.getMetaData();
System.out.println(rsmd.getColumnName(coulmn_number));
System.out.println(rsmd.getColumnType(column_number));
另一种方式
PreparedStatement pt=coneection.preparestatement("select * from table_name");
Resultset rs=pt.executeQuery();
ResultsetMetaData rsmd=pt.getMetaData();
System.out.println(rsmd.getColumnName(coulmn_number));
System.out.println(rsmd.getColumnType(column_number));
默认情况下,Oracle驱动程序不会返回
getColumns()
中的同义词信息。这在《Oracle 11g JDBC开发人员指南》中有记录,其下有:
getColumns的注意事项
默认情况下,如果指定了同义词,则getColumns
方法不会检索有关列的信息。要在指定同义词时启用信息检索,必须按如下方式调用连接上的setincludesynoyms
方法:
( (oracle.jdbc.driver.OracleConnection)conn ).setIncludeSynonyms(true)
这将导致连接上所有后续的getColumns
方法调用都包含同义词。这类似于setRemarksReporting
。或者,您可以设置includesynoyms
connection属性。这类似于remarksReporting
连接属性
但是,请记住,如果includeSynonyms
为true,则表\u name
列中返回的对象名称将是同义词名称(如果存在同义词)。即使将表名传递给getColumns
,也是如此
请注意,最后一项是非常重要的,要记住 您是在resultset内还是在resultset外调用resultsetmetadataobject.getColumns()?openedConnection.getMetaData()然后是metaData.getColumn(…),如果架构可用,则不应给出空的resultset。请在此处给出代码。作为getColumns()传递的是什么arguments@icCube你有兴趣获取coulmn名称吗?列名称、数据类型、,列大小,十进制数字Oracle 12c也是这样吗?似乎无法让它工作@老实说,我不知道。我不怎么使用甲骨文。