Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DatabaseMetaData.getColumns返回同义词的空结果集_Java_Oracle_Jdbc - Fatal编程技术网

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也是这样吗?似乎无法让它工作@老实说,我不知道。我不怎么使用甲骨文。