2020年11月24日火曜日

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

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

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

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

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

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

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


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

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


build.gradleに設定する定義情報
// https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanaccess
compile group: 'net.sf.ucanaccess', name: 'ucanaccess', version: '5.0.0'
そして、次のようにmdbファイルのパスを引数にして、コネクションを取得してデータベースアクセスできる。
                   Connection conn = null;

                   try {
                            conn = DriverManager.getConnection("jdbc:ucanaccess://D:/dbarea/db.mdb");
                   } catch (SQLException e) {
                            e.printStackTrace();
                   }