2012-04-23 18 views
1

良い一日、皆さん!DBからPostgres SQLスクリプトを生成するJavaライブラリ

ストレートポイントに。 DBからPostgres SQLスクリプトを生成するためのJavaライブラリがありますか?例えば

私は、

name | job 
    Andy | pull 
    Benny | push 

job_tableテーブルを持って、私はこの

String sqlInsert = 

    "INSERT INTO job_table(name, job) VALUES ('Andy', 'pull');"+ 
    "INSERT INTO job_table(name, job) VALUES ('Benny', 'push');"; 

や種類のようなもののような文字列のSQLスクリプトを取得したいです。

誰でも知っていますか?

Nb:私は手動で生成するために自分のコードをjavaで書いています。 しかし、私はそれが好きではありません。 :)

ありがとうございます。

+1

pg_dumpユーティリティを使用してデータベースを直接バックアップできない理由はありますか? –

+0

はい、私はクライアントがそれを取得して直接実行できるように、私のwebserviceにそのStringを使用したいと思います。私は、クライアントに他の形式(例:jsonまたはxml)を与えることができますが、何らかの理由でその文字列をクライアントに渡さなければなりません。 – ilyasfals

+0

JDBCを介したCOPYはできますか(回答参照)、厳密にINSERTが必要ですか?もしそうなら、現時点ではpg_dumpの簡単な代替手段はありません。おそらく "pg_dump --data-only --table = sometable"にシェルしてstdoutを読まなければなりません。 –

答えて

2

COPYコマンドのPgJDBCサポートを使用して、タブ区切りまたはCSVデータをデータベースに送り、同じ形式でデータを抽出します。 CopyManagerが必要です。PgConnectionから入手できます。

CopyManagerは現在かなり悲観的に文書化されていませんが、COPYコマンドのラッパーです。

PgConnectionインターフェイスにアクセスするには、java.sql.ConnectionをPgConnectionにキャストします。接続が接続プールサービスによってラップされている場合は、PgJDBCによって返された実際の基本接続を取得するために、接続プールサービスをアンラップする必要があります。 JPAを使用している場合は、実際のP​​gJDBC接続にアクセスするか、新しい接続を確立する必要があります。

実際にINSERTステートメントが必要な場合は、データベースに効率的にデータを渡すのではなく、具体的なニーズは何ですか?移植性?もしそうなら、あなたはどのように数値/数値/その他の表現のようなものを扱うでしょうか?

"標準"データタイプのみを処理する必要がある場合は、手書きコードが最良の方法です。

これを行う厳密に安全な方法は、現在のところpg_dumpによるものです。 pg_dump --data-only --table=thetableプロセスを起動し、stdoutから読み込んでジョブを実行することはできますが、これは(a)データソースや注入されたエンティティマネージャだけでなく、アプリケーションのDBの詳細を直接知る必要があります。 (b)pg_dumpパスの知識、(c)外部プロセスを実行するセキュリティ権限。残念ながら、現時点では、まったくそのような方法はありません。 pg_dumpはライブラリとして使用するようには設計されていませんが(たとえそれを変換すると言われていますが)、JNIなどでラップしなければならないCライブラリになります。 Ick。

関連する問題