Javaでシステム開発するときに、他の人がデータベースの環境構築をする場合、データベースまわりのロジックの動作確認しつつ、開発を進めたいので、データベースはAccessのmdbで代替して開発している、というかしていた。
だって、mdbを新規作成して、デザインビューでテーブルの定義をするだけなので、楽だから。
で、久しぶりにやってみたら動かない。
jdbcodbcドライバーをロードするところで、Exceptionが発生している。
jdbcodbcドライバーをロードする箇所
Exceptionが発生!!
- try {
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- return null;
- }
どうしてだろう、と思い、調査してみると、こちらのサイトを発見。
- 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に設定する定義情報
そして、次のようにmdbファイルのパスを引数にして、コネクションを取得してデータベースアクセスできる。
- // https://mvnrepository.com/artifact/net.sf.ucanaccess/ucanaccess
- compile group: 'net.sf.ucanaccess', name: 'ucanaccess', version: '5.0.0'
- Connection conn = null;
- try {
- conn = DriverManager.getConnection("jdbc:ucanaccess://D:/dbarea/db.mdb");
- } catch (SQLException e) {
- e.printStackTrace();
- }