ともさんの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導入覚書

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

スリットカメラアプリケーション  
ゴアテックス生地の入手方法  
洗濯物干しハンガーの自作  
3次元CADで帽子の型紙  
【Java】画像の座標変換のためのクラス  
USBカメラをJAVAで制御して定点観測  
ミソハギの育てかた  
3次元CADでぬいぐるみ  
JavaFXのMeshViewに衝突判定を付加  
ニセアカシアの伐採  
小動物の飼いかた  

私の他のサイト

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

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

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