ともさんの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
Javaのextフォルダ下にコピペしました。私の場合、いろいろなjarファイルをext内に放り込んでしまっているので、何がなんだか訳が分からなくなってます。

とりあえず接続してみる

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に買い換えて、Accessは32にしたら全く動きませんでした。
〇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-05-18 09:02:15

ともさんのHP >プロブラミング >自作JavaLibrary >UcanAccess導入覚書

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

須屋  
3Dシーンに2Dコントロールを表示  
井戸ポンプ  
ファイル選択ダイアログ  
ともさんのHP  
タイムラプス撮影  
Raspberry Piを太陽電池に接続  
ラズパイ(Raspberry Pi)で電子工作  
茶室の平面図集  
ともさんの開発室  
シンプルなパネルラインワンピースの型紙と作りかた  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます