プログラム学習室 http://studyhallweb.com/

Java学習記: JDBC

AccessへJDBCで接続する方法

AccessにJDBCで接続するためには、事前にユーザーDSNを設定しておかなければなりません。
ユーザーDSNはコントロールパネルから管理ツールのデータソース(ODBC)で設定します。
Accessのファイル(.mdb)単位での設定となります。
JDBCドライバーを個別にインストールする必要はありません。Javaの導入時に標準で付いてくるようです。

JDBC接続クラス

JDBCで接続するためのクラスを作成し、各プログラムで使いまわすことにします。
mdbaccessというサブフォルダを作成し、その中におきます。
デフォルトでのユーザーDSNは"sqltest"としています。
package mdbaccess;

import java.io.*;
import java.sql.*;
import java.util.Properties;

public class clsSQL {
  private String     DRIVER;
  private String     URL;
  private Connection CON;
  private Statement  SQLSELECT;  // Sataementの使いまわしは出来ない
  private Statement  SQLUPDATE;
    // 同じStatementを使いまわすと、先にSelectしResultSetに値を保持しても、
    // updateを実行するとResultSetの値が変わってしまう
    // 従って、Statementは使いまわし出来ない
    // これ以上のStatementが必要なときはconnDbの戻り値を利用して
    // 新たにStatementを作成すること

  // コンストラクタ
  public clsSQL() {
    // Accessでの実行用
    DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
    URL    = "jdbc:odbc:sqltest";
    CON = null;
    SQLSELECT = null;
    SQLUPDATE = null;
  }
  public clsSQL(String sDriver, String sURL) {
    // 別のmdbファイルを指定するとき
    // sDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    // sURL = "jdbc:odbc:(ユーザーDSN名)";
    DRIVER = sDriver;
    URL = sURL;
    CON = null;
    SQLSELECT = null;
    SQLUPDATE = null;
  }

  // DB接続
  public Connection connDb() throws ClassNotFoundException, SQLException {

    // JDBCドライバのロード
    Class.forName(DRIVER);

    // DBへの接続
    CON = DriverManager.getConnection(URL);
    return CON;    // このConnectionを使ってクラスの外で新規にStatement作成可

  }
  // DB接続の終了
  public void disconDb() throws SQLException {
    // Close database resources
    if (SQLSELECT != null)
      SQLSELECT.close();
    if (SQLUPDATE != null)
      SQLUPDATE.close();
    if (CON != null)
      CON.close();
  }

  // SQLの実行
  // Query
  public ResultSet exeSelect(String sSQL) throws SQLException {
    SQLSELECT = CON.createStatement();
    ResultSet rs = null;
    if (CON != null && SQLSELECT != null) {
      rs = SQLSELECT.executeQuery(sSQL);
    }
    return rs;
  }
  // Update
  public int exeUpdate(String sSQL) throws SQLException {
    SQLUPDATE = CON.createStatement();
    int iRtn = 0;
    if (CON != null && SQLUPDATE != null) {
      iRtn = SQLUPDATE.executeUpdate(sSQL);
    }
    return iRtn;
  }
}
				

DB接続の部分を以下の様にすれば、ID・パスワードの入力が必要なDBへの接続にも使えます。
  // DB接続
  public Connection connDb(String sUserId, String sPassword)
         throws ClassNotFoundException, SQLException {

    // JDBCドライバのロード
    Class.forName(DRIVER);

    // DBへの接続
    Properties properties = new Properties ();
    properties.put ("user", sUserId);
    properties.put ("password", sPassword);
    CON = DriverManager.getConnection(URL, properties);
    return CON;    // このConnectionを使ってクラスの外で新規にStatement作成可

  }
				

AccessへのSQLの実行

Accessに接続し、SQLのSELECT文を実行する例をしまします。
import java.io.*;
import java.sql.*;
import java.util.*;
import mdbaccess.clsSQL;

class SQL001 {

  public static void main (String args[]) {

    try {
      // 定義
      ResultSet  rsCD;
      String    sSQL;

      // DB接続
      clsSQL oSQL = new clsSQL();
      Connection oCon = oSQL.connDb();
      System.out.println("Connect Ok");
      Statement oStat = oCon.createStatement();

      // SELECT文の指定
      sSQL = "SELECT FIELD1, FIELD2, FIELD3 FROM TEST WHERE FIELD2='OK'";

      // SQL(Select)実行
      rsCD = oStat.executeQuery(sSQL);

      // 結果の表示
      while(rsCD.next()){
        System.out.println(rsCD.getString("FIELD1") + " "
                + rsCD.getString("FIELD2") + " "
                + rsCD.getDouble("FIELD3"));
      }

      // DB開放
      oSQL.disconDb();
      System.out.println("Disconnect Ok");
    }
    catch (Exception e) {
      System.out.println(e);
    }
  }
}
				
SQLの結果はResultSetで受けて、フィールドの型に応じて取得するメソッドが異なります。(getString( )やgetDouble( )など)