2012-02-09 6 views
1

私のプログラマーは、有効なSQLの入力を受け取り、SQLのカラム名を返す必要があります。 そして、私はSQL文を実行しないでこれをやりたいのです。私はJavaソリューションを探しています。アドホックSQLのカラム名

私のdbmsはolapに最適化されており、テーブルは非常に大きく、結果セットの制限は機能しません。私の場合、実際に実行時間は受け入れられません。それ以上の時間がかかります

+0

可能な複製:http://stackoverflow.com/questions/660609/sql-parser-library-for-java、クエリから列名を取得するSQLパーサを探しています – oers

+0

解析は1つのオプションですしかし、私の主な関心事は、制限された解析ではありません。 – dursun

+0

私はsqlを実行したくないので、クエリを表す文字列を解析する必要があります。この文字列をSQLクエリとして解釈する必要があります。これは、文法を適用して解析を行います。 – oers

答えて

3

クエリを準備しますが、それを実行するのではなく、準備された文でgetMetaDataを呼び出してください。ドライバがサポートしている場合、クエリを実行せずに結果セットのメタデータを列の説明とともに返す必要があります。

+0

あなたはそれのように動作しませんafamのコードを与えることができます。 – 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 oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:135) \tで\t oracle.jdbc.driver.OraclePreparedStatement.getMetaDataで(DatabaseError.java:146)(OraclePreparedStatement.java:4049) – dursun

関連する問題