dポイントプレゼントキャンペーン実施中!

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

A 回答 (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();
}
}
}
    • good
    • 1
この回答へのお礼

ありがとうございます!!
CSV出力ができてました。

実際は、サーブレットで動かしてCSV出力します。
ですから、参考にして作成してみます。

お礼日時:2002/08/21 17:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A