sql查询中的列列表

时间:2015-08-10 07:48:56

标签: java sql oracle jdbc

我有一个使用各种连接的查询,我只需要此查询返回的列列表。我在java中完成它,通过只询问一行rownum = 1并获取值的列名。问题是如果该查询没有返回数据。

对于前。

select * from something

如果此查询返回任何数据,则会返回col1col2col3。 但是,如果此查询没有返回任何数据,则会抛出错误。

我需要的是

我有什么方法可以运行

desc (select * from something)

或类似获取查询返回的列列表。

它可以在sql或JAVA中。这两种方法都可以接受。

在我的应用程序中,用户传递查询,我可以为查询添加包装器,但我无法完全修改它。

申请流程

来自用户的查询 - >通过java执行并获取一行 - >返回结果集中列的列表。

3 个答案:

答案 0 :(得分:4)

您可以使用结果集的ResultSetMetaData

例如:

 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2"); 
 ResultSetMetaData rsmd = rs.getMetaData();  
 int countOfColumns = rsmd.getColumnCount();
 for(int i = 1; i <= countOfColumns ; i++  )
 System.out.println(rsmd.getColumnName(i));

答案 1 :(得分:0)

您可以将查询转换为视图,然后可以通过查询user_tab_columns查看视图中的列

select * from user_tab_columns

答案 2 :(得分:0)

对于所有用户拥有的表,info_schema.COLUMNS的Oracle等效项对于当前用户拥有的表是USER_TAB_COLS,ALL_TAB_COLS或DBA_TAB_COLS。

表空间不等同于模式,也不必提供表空间名称。

如果要为特定用户拥有的列OF表查询ALL_TAB_COLS或DBA_TAB_COLS,则提供架构/用户名将是有用的。在你的情况下,我想象查询看起来像:

String sqlStr= "

   SELECT column_name

   FROM   all_tab_cols

   WHERE  table_name = 'users'

   AND owner = ' || +_db+ || '

   AND column_name NOT IN ( 'password', 'version', 'id' )
   "

请注意,使用此方法可能会导致SQL注入。