java初心者です、不備があったらご指摘ください。
※当初質問文から、一歩進んだため、ソースを修正しています。
(当初質問:copyManagerを利用してpsqlコマンドを実行したい)
前提・実現したいこと
テーブルの全データをCSVに出力したいです。
javaを使ってPostgreSQLにアクセスしようと思っています。
PostgreSQLからデータを出力する際は、下記のようなCOPYコマンドを利用したいと思っています。
java
1COPY driver_message TO STDOUT WITH (FORMAT csv ,HEADER ,NULL 'null' ,DELIMITER E'\t'); 2
上記コマンドをjava上で実行するためには、copyManagerを使うことで実行できると見つけて実装していますが、実行してもファイルを出力しますがファイルの中身が空となり正しく出力できません。
copyManagerの使い方が違う・コマンドがおかしい、などご指摘ありましたら頂けると幸いです。
java
1public class OutputDbDao { 2 3 /** 4 * TSV出力処理 5 * 6 * @throws SQLException 7 * @throws ClassNotFoundException 8 * @throws IOException 9 */ 10 public void exportTsv() throws SQLException, ClassNotFoundException, IOException { 11 12 System.out.println("OutputDao 開始"); 13 14 // PostgreSQLへ接続 15 Class.forName("org.postgresql.Driver"); 16 17 18 // 接続情報取得 19 String jdbcUrl = "jdbc:postgresql://xxx.xxx.xxx.xxx:5432/abc_cde"; 20 String DbUser = "user"; 21 String DbPassword = "pass"; 22 23 Connection conn = null; 24 conn = DriverManager.getConnection(jdbcUrl, DbUser, DbPassword); 25 26 // PostgreSQLコマンド実行クラス 27 // copyManager準備 28 FileOutputStream file = new FileOutputStream("/tmp/table.tsv"); 29 CopyManager copyManager = new CopyManager((BaseConnection) conn); 30 Writer writer = new OutputStreamWriter(file, "UTF8"); 31 32 // PostgreSQLコマンド呼び出し実行 33 String command = "COPY driver_message TO STDOUT WITH (FORMAT csv ,HEADER ,NULL 'null' ,DELIMITER E'\t');"; 34 35 // PostgreSQLコマンド実行 36 copyManager.copyOut(command,writer); 37 38 System.out.println("OutputDao 完了"); 39 40 } 41}
回答1件
あなたの回答
tips
プレビュー