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(); }