2012-02-09 3 views
1

Моя программа получит ввод действительного sql и должна вернуть имена столбцов для sql. И я хочу сделать это без выполнения инструкции sql. Я ищу Java-решение.имена столбцов для ad-hoc sql

Мои dbms - оракул, оптимизированный для olap, и таблицы настолько велики, что ограничение набора результатов не работает. На самом деле время исполнения неприемлемо для моего дела. это занимает больше минуты

+0

Возможный дубликат: http://stackoverflow.com/questions/660609/sql-parser-library-for-java, вы ищете парсер sql, который дает вам имена столбцов из запроса – oers

+0

синтаксический анализ является одним из вариантов , но моя главная проблема не ограничивается разбором. – dursun

+0

Я не хочу выполнять sql, вам нужно разобрать строку, представляющую запрос. Вам нужно интерпретировать эту строку как запрос sql, и это делается путем применения к ней грамматики -> синтаксического анализа. – oers

ответ

3

Подготовьте запрос, но вместо его выполнения просто вызовите getMetaData в подготовленном сообщении. Если ваш драйвер поддерживает его, он должен возвращать метаданные набора результатов с описаниями столбцов без выполнения запроса.

+0

Можете ли вы дать код samle, потому что он не работает. – dursun

+0

'ResultSetMetaData rsmd = conn.prepareStatement (sql) .getMetaData();', а затем 'rsmd.getColumnCount()', 'rsmd.getColumnName (1)', 'rsmd.getColumnTypeName (1)' и т. Д. – araqnid

+1

Я пропустил ваш комментарий к поддержке драйверов. Я думаю, что драйвер в ojdbc14.jar не поддерживает. потому что я получил следующее исключение ... java.sql.SQLException: заявление ручка не выполняется: GetMetadata \t на oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:112) \t в 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

Смежные вопросы