2016-10-19 5 views
4

結果をCSVとしてSTDOUTに返すクエリを実行します。hibernateを使用してpostgresqlからCSVとして結果を取得

pgAdminでクエリを実行すると、正常に結果が得られます。

しかし、私は、私は次の例外を取得休止状態を使用して、同じクエリを実行する場合:ResultSetの

Iを抽出できませんでした:

javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCExceptionをテーブルの構造を表示してはいけませんが、SQLがうまくいることがわかります( "sql"の内容全体をコピーしてからpgAdminで実行しました)。その後、私は次のようにそれを実行

String sql = "COPY (" + sqlQuery + ") TO STDOUT WITH CSV"; 

:クエリがどのように見える、私が発見したすべての関連質問に

Query query = getEntityManager().createNativeQuery(sql); 

Object result = query.getSingleResult(); // I also tried the other get results method...(`getFirstresult()` has returned 0) 

、私はOPではなく、標準出力のファイルにcsvファイルを置くことを見ました。

hibernateを使用してcsv resultを返すことは可能ですか?

ありがとうございます!

+0

ここでHibernateを使用するのはなぜですか?単純なJDBCクエリ(またはCSVライブラリに加えて)ははるかに簡単です。 –

+0

@AdrianShumこれは私がこの問題を解決する方法です...私はちょうどHibernateを使用することができないことを確認したいです...ありがとう! :) – SometimesNeedSomeHelp

答えて

1

AFAIK、COPYは、PostgreSQL JDBCドライバ(最後にpostgresql-9.4.1208.jre7でテスト済み)ではネイティブにサポートされていません。したがって、Hibernateはコマンドを実行できません。

あなたは本当にあなたがCopyManager検討すべきCOPY使用する必要がある場合:how to copy a data from file to PostgreSQL using JDBC?

しかし、個人的に、私はあなたのアプローチを変更提唱でしょう。 COPYでデータを読み込んでいると、私にハックのように見えます。

+0

すばらしい答えをありがとう! :)受け入れの外に、私は投票するだろうが、私は十分な評判を持っていない... – SometimesNeedSomeHelp

0

2行のコードを使用してunivocity-parsersでこれを行うことができます。

CsvRoutines routines = new CsvRoutines(); 
routines.write(resultset, new File("/path/to/output.csv"), "UTF-8"); 

write()メソッドはすべてを処理します。結果セットはルーチンによって自動的に閉じられます。

関連する問題