LoginSignup
10
10

More than 5 years have passed since last update.

[Java:備忘録]JavaからAccessMDBに接続する

Last updated at Posted at 2014-09-17

概要:
  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になっています。
  # 専用にログ出力クラス用意せーやと思ったけど、めんどくさかった。

  あと、エラーハンドリングはきちんと作ってください。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10