元数据上的方法getColumns()
返回一个空的ResultSet用于同义词(对于表和视图,它正确地返回列列表)。
这在Oracle 11g Express上发生,并使用最新的Oracle JDBC驱动程序(11.2.3)。
其他SQL服务器是否也会发生这种情况?
欢迎任何帮助/想法来解决这个问题。
答案 0 :(得分:9)
默认情况下,Oracle驱动程序不会返回getColumns()
中有关同义词的信息。这在Performance Extensions下的Oracle 11g JDBC开发人员指南中有记录:
getColumns的注意事项
默认情况下,如果指定了同义词,则
getColumns
方法不会检索有关列的信息。要在指定同义词时启用信息检索,必须按如下方式调用连接上的setIncludeSynonyms
方法:( (oracle.jdbc.driver.OracleConnection)conn ).setIncludeSynonyms(true)
这将导致连接上的所有后续
getColumns
方法调用都包含同义词。这类似于setRemarksReporting
。或者,您可以设置includeSynonyms
连接属性。这类似于remarksReporting
连接属性。但是,请记住,如果
includeSynonyms
为真,那么table_name
列中返回的对象的名称将是同义词名称(如果存在同义词)。即使您将表名传递给getColumns
,也是如此。
请注意,最后一项非常重要,请记住!
答案 1 :(得分:1)
使用这种方式
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));