• ベストアンサー

csv出力について

JDBCでDBからデータを取得して、そのデータをCSV形式でEXCELに出力したい のですが、どのようにすればいいか教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • m_hagizo
  • ベストアンサー率65% (31/47)
回答No.1

どのように・・・と言いますと? どこから説明すればいいのでしょうか?(^_^; 「Excelに出力」というニュアンスから、やりたいことを100%実現するのは多分無理かな・・・と思うのですが。 とりあえず、ちょっと長いですが、簡単なサンプルを付けておきますね。 このサンプルは、 >java DBWriter ファイル名 "SQL文" とすると動くもので、指定したファイル名にSQLの結果をCSV形式で吐き出します。 実行例) >java DBWriter C:\tmp\TEST.csv "SELECT * FROM EMP" ちょっとインデントがなくて見にくいですが、テキストエディタ等に貼り付けて見やすくしてください。 バグ取りはしてませんので、悪しからず。 ------------------------------------------------------------- import java.io.*; import java.util.*; import java.sql.*; public class DBWriter { public DBWriter() { super(); } public static void main(java.lang.String[] args) { if (args.length != 2) { System.out.println("起動方法が違います"); System.exit(1); } else { try { DBWriter dbWriter = new DBWriter(); // 引数1をファイル名、引数2をSQL文として扱う dbWriter.createCSV(args[0], args[1]); } catch (Exception e) { // 何らかのエラーがあっても、表示するのみ System.out.println("エラーです"); e.printStackTrace(); } } } protected void createCSV(String fileName, String sql) throws Exception { // ドライバクラス名。これはOracleの場合の例。 String driverName = "oracle.jdbc.driver.OracleDriver"; // JDBCドライバURL。これはOracleの場合。 String connURL = "jdbc:oracle:thin:@172.20.108.51:1521:NDCORE2"; String connUID = "ibm07s"; // DBの接続ユーザ名 String connPWD = "ibm07s"; // DBの接続パスワード Vector datas = new Vector(); // データ格納用の可変長配列 // データベースに接続する Class.forName(driverName); Connection conn = DriverManager.getConnection(connURL, connUID, connPWD); // SQLを発行する Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // ファイルをオープンする(ようなもの) File file = new File(fileName); FileWriter fw = new FileWriter(file); // データベースの列名定義を取得する ResultSetMetaData rsmd = rs.getMetaData(); int cnt = rsmd.getColumnCount(); for (int idx = 1; idx <= cnt; idx++) { String colName = rsmd.getColumnName(idx); datas.add(colName); } // 列名をファイルに書き出す writeData(fw, datas); // データベースの各列のデータを取得する while (rs.next()) { for (int idx = 1; idx <= cnt; idx++) { String data = rs.getString(idx); datas.add(data); } // 各列のデータをファイルに書き出す writeData(fw, datas); } // ファイルを閉じる fw.close(); } protected void writeData(FileWriter fw, Vector datas) throws IOException { String buf = ""; // ファイルに書き出す文字列を入れるところ // データが空でなかった場合のみ実行 if (datas != null && !datas.isEmpty()) { for (int idx = 0; idx < datas.size(); idx++) { // 先頭以外で、カンマをつける if (idx > 0) { buf += ","; } // 取り出したデータを文字列にくっつける buf += (String)datas.get(idx); } // 行末に改行を入れる buf += "\n"; // できた文字列をファイルに書き出す fw.write(buf); // もらったデータを空にする datas.clear(); } } }

machitaka
質問者

お礼

ありがとうございます!! CSV出力ができてました。 実際は、サーブレットで動かしてCSV出力します。 ですから、参考にして作成してみます。