我想知道是否有一种方法可以返回结果集(Java 中的 Oracle 数据库)的列名,如果我实际执行了查询,就会生成这些列名。例如,假设我的 SQL 看起来像这样:
select * from <complex table join>;
有没有一种方法可以将这个查询发送到 oracle 并让它告诉我它将返回的结果集中的列名是什么而不实际执行查询(因为它很昂贵)?
最佳答案
我认为使用 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));
}
(编辑):我在 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
关于java - 只返回 ResultSet 的列名而不实际执行查询(Oracle 和 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245411/