ともさんのHP >プロブラミング >自作JavaLibrary >UcanAccess導入覚書
UcanAccessの使いかた覚書
Javaを使ってMicrosoft Accessデータベースに接続して作業するプログラムをたくさん持っています。
写真を登録したり、ホームページの文章を登録しておいて、htmlファイルを生成したり...
毎朝その日の予定をメールでスマホに送ったり...その他いろいろです。
なので私にとって
Java
楽天 とAccessの組み合わせはなくてはならない物になっています。
JDBC-ODBCブリッジでJavaとAccessを接続していましたが、Java8をインストールしたところ、突然使えなくなってしまいました。
JDBC-ODBCブリッジ、Java8ではサポート打ち切りになっていたのですね。動かなくなって初めて気づきました。
今回時間が出来たので、UCanAccessを使って接続をしてみることにしました。UCanAccessはODBCを使用せずに接続できる、純粋なJavaのJDBCドライバです。
UCanAccessのダウンロード、インストール
まずはPCにインストールします。
こちらからダウンロードしました。
解凍すると下記5つのjarファイルが出来るので、
ucanaccess-2.0.9.5.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
hsqldb.jar
jackcess-2.1.0.jar
とりあえず接続してみる
D:work\dbs\にtest.assdbというAccessデータベースを作り、その中にtestというテーブルを作り、その中にsiken1というフィールドを作って下記コード実行。
普通に動いてくれました。
なんだか簡単で拍子抜けしました。
UCanAccess使用コード
import java.sql.*;
public class Commtest {
public static void main(String[] args) {
try{
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://d:/work/dbs/test.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [siken1] FROM [test]");
while (rs.next()) {
System.out.println(String.format("%s", rs.getString(1)));
}
}catch( SQLException e ){System.out.println("err");}
}
}
UCanAccess乗り換え覚え書き
結局完全移行するのが面倒で、最近までODBSCを使い続けていたのですが、PCを買い換えてとうとう動かなくなってしまい、全面的に乗り換えることにしました。
いろいろ引っかかるところがあったので、自分用も兼ねて覚え書きにしておきます。
ODBCは32ビットアプリと64ビットアプリの間では利用できない
確認したわけではないけど、動かない。Windowsを64に買い換えて、Access32を使用したら、全く動きませんでした。
Java8ではODBSC-JDBCブリッジを利用できない
自分で作ったアプリ、7までしか動かないデータベースを利用するものと、8からでしか動かないJavaFXを利用するものがあって、開発するアプリごとにEclipseのVM設定を切り替える必要があり、大変でした。
UCanAccessに乗り換えたので、今後はJava8だけで開発できます。
UCanAccessを最新版に差し替える
あたりまえだけど、忘れてました。
エラーコメント、最新おき換えたら詳しくなっていて、それをもとにバグ取りができました。
SQL作成
ODBSC-JDBCブリッジではACCESSのクエリが使えましたが、UCanAccessではほぼ使えないので、クエリの代わりにSQL文を作成して渡しました。
具体的にはクエリをデザインビューで開き、さらにSQLビューで表示させて出てきたSQL文を書き換えて使いました。
そのままでは通らないので、下記変更をします。
「!」→「.」に差し替え。
日付/時刻型データのSQL内計算はダメ
IIF( [table].[time1] > [table].[time2] , [table].[time1] , [table].[time2])
こんな文が通らないので、
IIF( [table].[time1] != null , [table].[time1] , [table].[time2])
こんな風に書き換えて通しました。
Yes/No型データの受け取り
1/0で受け取っていたけど、UCanAccessではTRUE/FALSEになっていました。
データの格納
文字列は「'」で囲む。時刻は「#」で囲む。
最終更新日: 2017-07-28 09:20:21
ともさんのHP >プロブラミング >自作JavaLibrary >UcanAccess導入覚書
ツイート