概要:
MDBにアクセスし、データを引っ張ってくるPG。
未だ蔓延るMDBと戦いで作成。
目的:
業務で個別PG組む際に偶に使うから。
バッチ起動でデータ変換とかデータチェックとかする場合とか。
以下ではMDBに接続、値をゲットしてから呼び出し元へ返却する想定です。
ぐぐれば、もっと分かりやすく出てくるけど、自分が使う場合はこれで充分なので。
つまり、備忘録。
ソース:
/**
* MdbSetuzoku.
* SAMPLEMDBは各自で個別に設定してね.
*/
private StringBuffer MdbSetuzoku() {
StringBuffer buf = new StringBuffer();
try {
// ドライバオブジェクトのロード
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 日本語対応
Properties prop = new java.util.Properties();
prop.put("charSet", "SJIS");
// データベースへの接続
// DB名は直に書いているが、引数から渡してあげると良い
Connection conn = DriverManager.getConnection("jdbc:odbc:SAMPLEMDB", prop);
// ステートメントオブジェクトの生成
Statement st = conn.createStatement();
// クエリを実行してデータを抽出する.
// GetDataSqlは個別に用意するSQL群。今回は省く。
ResultSet res = st.executeQuery(GetDataSql().toString());
// データ存在チェック
// 普通はTrue/Falseだけど、当時は何故かこうなった
Integer chkNum = 0;
// ヘッダーの表示
// 以下は別になくても良いです。
buf.append("通番,ジョブID,ジョブ名称,ジョブステータス,開始時間\n");
// 取得結果を編集
// 取得結果が0件の場合はループしません。
while (res.next()) {
buf.append(res.getString(1) + "," + res.getString(2) + "\n");
chkNum = 1;
}
// 出力対象データの存在有無を確認
// ループ処理が発生しなかった場合はここで処理が終了します。
// 作成当時は必要だと思い作成するも、今は他に手がなかったのかと思案。
if (chkNum != 1) {
return null;
}
// 接続解除
conn.close();
// 業務で使うなら、きちんとしたエラーハンドリングにしましょう。
} catch (SQLException s) {
System.out.println("SQL Error: " + s.toString() + " " + s.getErrorCode() + " " + s.getSQLState());
} catch (Exception e) {
// エラーメッセージのみ表示
System.out.println(e.getMessage() + " States Check Error");
}
return buf;
}
備考:
System.out.printlnはSystem.err.printlnでもいいです。
上記PGでは処理結果を全てテキストに出力させているので、System.out.printlnになっています。
# 専用にログ出力クラス用意せーやと思ったけど、めんどくさかった。
あと、エラーハンドリングはきちんと作ってください。