2012-02-09 68 views
1

我PROGRAMM將得到有效的SQL的輸入,並應爲SQL返回列名。 我想這樣做完全不執行sql語句。我正在尋找一個Java解決方案。列名的ad-hoc SQL

我DBMS是Oracle爲OLAP優化,表是該結果集限制不工作這麼大。其實執行時間對我的情況是不可接受的。它需要不到一分鐘的

+0

可能的重複:http://stackoverflow.com/questions/660609/sql-parser-library-for-java,你正在尋找一個SQL解析器,它給你從查詢列名稱 – oers 2012-02-09 08:34:16

+0

解析是一個選項,但我主要關心的不是有限的解析。 – dursun 2012-02-09 09:24:53

+0

我不想執行sql,你必須解析表示查詢的字符串。你需要把這個字符串解釋爲一個sql查詢,這是通過對它進行語法分析來完成的 - >解析。 – oers 2012-02-09 09:27:51

回答

3

再準備查詢,但不是執行它,只需調用getMetaData在準備好的聲明。如果您的驅動程序支持它,則應該返回帶有列描述的結果集元數據而不執行查詢。

+0

你可以給samle代碼becase afaik它不起作用。 – dursun 2012-02-09 12:42:25

+0

'ResultSetMetaData rsmd = conn.prepareStatement(sql).getMetaData();'然後是'rsmd.getColumnCount()','rsmd.getColumnName(1)','rsmd.getColumnTypeName(1)'等 – araqnid 2012-02-09 13:10:27

+1

我錯過了評論驅動程序支持。我認爲ojdbc14.jar中的驅動程序不支持。因爲我得到以下異常... java.sql.SQLException:語句句柄未執行:getMetaData \t at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) \t at oracle.jdbc.driver.DatabaseError .throwSqlException(DatabaseError.java:146) \t在oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:135) \t在oracle.jdbc.driver.OraclePreparedStatement.getMetaData(OraclePreparedStatement.java:4049) – dursun 2012-02-09 13:17:51