仅返回ResultSet的列名而不实际执行查询(Oracle和Java)

mpe*_*tis 7 java oracle

我想知道是否有办法返回在我实际执行查询时生成的结果集(Oracle数据库,在Java中)的列名.例如,假设我的SQL看起来像这样:

select * from <complex table join>;
Run Code Online (Sandbox Code Playgroud)

有没有办法将此查询发送到oracle并让它告诉我结果集中的列名是什么,它将返回而不实际执行查询(因为它很昂贵)?

a_h*_*ame 12

我认为使用PreparedStatement可以工作:

PreparedStatement stmt = connection.prepareStatement("select ...");
ResultSetMetaData meta = stmt.getMetaData();
for (int col=0; col < meta.getColumnCount(); col++) 
{
   System.out.println("Column: " + meta.getColumnName(col + 1));
}
Run Code Online (Sandbox Code Playgroud)

(编辑):我尝试使用Oracle 11.2和驱动程序版本11.2.0.3并且它可以工作.

如果失败,您只需将where 1=0查询附加到查询并执行即可.至少它不会返回所有行(也可能也使用Statement.setMaxRows(),只是为了确定.

最终(但相当复杂)的选择是dbms_sql用来打开,准备和描述该陈述.有关详细信息,请参阅手册:http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_sql.htm


Fra*_*itt 2

您可以尝试将查询包装在外部选择中并添加 where 1=0 以防止它获取任何行:

  SELECT * from (
    <your query here>
  )
  WHERE 1=0
Run Code Online (Sandbox Code Playgroud)