我想知道是否有办法返回在我实际执行查询时生成的结果集(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
您可以尝试将查询包装在外部选择中并添加 where 1=0 以防止它获取任何行:
SELECT * from (
<your query here>
)
WHERE 1=0
Run Code Online (Sandbox Code Playgroud)