JavaでPostgreSQLにCSVデータを取込むときはCopyManagerが速くて便利

無知は怖いという話です。

今まではORMフレームワーク使って1件ずつinsertしたり、ちょっと早くしたい場合はINSERT文を構築して100件ずつとかまとめてinsertしたりしてました。

今回、ちょっと調べてみるとPostgreSQLではCOPYコマンドというのがあって、jdbcライブラリにこれに対応したAPIがあるというのも知りました。
それがCopyManagerです。

使い方はこんな感じ

CopyManager copyManager = new CopyManager(connection);
Reader reader = new InputStreamReader(new FileInputStream(file), "MS932");
String sql = "COPY table_name (column1, column2,,,) FROM STDIN (FORMAT csv, HEADER)";
long result= copyManager.copyIn(sql, reader);

COPYコマンド自体のオプション等の説明はこちらを参照してください。
http://www.postgresql.jp/document/9.2/html/sql-copy.html
上の例ではCSV形式でヘッダ行ありのファイルを取込むようにしています。
Readerの生成は英数字だけとかの場合はFileReaderでも事足りるのかなと思います。(今回はSJISのファイルを扱ってます)
InputStreamでもOKです。
http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

CopyManagerのコンストラクタに渡しているconnectionはorg.postgresql.core.BaseConnectionを実装したインスタンスです。
特に深いことを考える必要がないなら

BaseConnection connection = new Jdbc4Connection(host, port, user, database, info, url);

とかでいいと思います。
フレームワーク等で管理しているコネクションプールを使いたい場合はどこから取得すればいいか探す必要があると思います。