2020年11月24日火曜日

JavaでAccessのmdbでデータベースアクセスする方法

 Javaでシステム開発するときに、他の人がデータベースの環境構築をする場合、データベースまわりのロジックの動作確認しつつ、開発を進めたいので、データベースはAccessのmdbで代替して開発している、というかしていた。

だって、mdbを新規作成して、デザインビューでテーブルの定義をするだけなので、楽だから。

で、久しぶりにやってみたら動かない。

jdbcodbcドライバーをロードするところで、Exceptionが発生している。

jdbcodbcドライバーをロードする箇所

  1. try {
  2. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  3. } catch (ClassNotFoundException e) {
  4. e.printStackTrace();
  5. return null;
  6. }
Exceptionが発生!!
  1. java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
  2. at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  3. at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  4. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
  5. at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  6. at java.lang.Class.forName0(Native Method)
  7. at java.lang.Class.forName(Class.java:264)
どうしてだろう、と思い、調査してみると、こちらのサイトを発見。 


どうやらjava7で、jdbcodbcドライバーを使用してのAccessのmdbのアクセスは非推奨。 そして、java8からはできなくなっていたらしい。 また、代替方法もあって、「UCanAccess」というのを使用すればできるとのこと。

まず、以下のサイトからgradleの設定情報をローカルのbuild.gradleの定義に設定する。


build.gradleに設定する定義情報
  1. // https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanaccess
  2. compile group: 'net.sf.ucanaccess', name: 'ucanaccess', version: '5.0.0'
そして、次のようにmdbファイルのパスを引数にして、コネクションを取得してデータベースアクセスできる。
  1. Connection conn = null;
  2.  
  3. try {
  4. conn = DriverManager.getConnection("jdbc:ucanaccess://D:/dbarea/db.mdb");
  5. } catch (SQLException e) {
  6. e.printStackTrace();
  7. }