0

皆さん、こんにちは!

要点にまっすぐ。DBからPostgres SQLスクリプトを生成するJavaライブラリはありますか?

たとえば、私はテーブル job_table を持っています

   name    | job
   Andy    | pull
   Benny   | push

次に、このような文字列のSQLスクリプトを取得したい

String sqlInsert = 

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

またはそのようなもの。

誰か知ってる?

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

前にありがとう。

4

1 に答える 1

2

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

CopyManagerは現在、かなりひどく文書化されていませんが、COPYコマンドの単なるラッパーです。

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

INSERTデータベースにデータを配信する効率的な方法ではなく、実際にステートメントが必要な場合、具体的なニーズは何ですか?移植性?もしそうなら、NUMERIC / DECIMAL /などのさまざまな表現のようなものをどのように処理しますか?

「標準」のデータ型のみを処理する必要がある場合は、手作業で作成したコードが最善の方法です。

これを行うための唯一の厳密に安全な方法は、現在pg_dumpを使用することです。プロセスを呼び出し、pg_dump --data-only --table=thetableそのstdoutから読み取ってジョブを実行できますが、これには次のことが必要です。(a)データソースやコンテナーから挿入されたエンティティマネージャーだけでなく、アプリ内のDBの詳細を直接知る必要があります。(b)pg_dumpパスの知識、および(c)外部プロセスを実行するためのセキュリティ権限。残念ながら、現時点ではそれを回避する方法は実際にはありません。pg_dumpはライブラリとして使用するようには設計されていません(変換するという話はありますが)。たとえそうであったとしても、JNIなどを介してラップする必要があるCライブラリになります。いや。

于 2012-04-23T07:23:53.813 に答える