SikuliX:MS-Access (.mdb、.accdb)に接続する

シナリオ

  • Java8以降はJDBC-ODBCブリッジが削除されたのでUCanAccessをインストールし接続する。
  • c:\sample\test.mdbに接続しテーブル:T_通貨の通貨コード:USD の通貨名を取得
  テーブル:T_通貨 
   

UCanAccessのインストール

・インストール先はc:\ucanaccessとする。
・ここのUCanAccess-5.0.1.bin.zipをダウンロード ※この例では5.0.1だが適宜読み替える
・解凍後、以下のjarファイルをc:\ucanaccessに保管する。
 ucanaccess-5.0.1.jar   ←解凍フォルダの直下にある
 commons-lang3-3.8.1.jar ←以下はlibフォルダ内
 commons-logging-1.2.jar
 hsqldb-2.5.0.jar
 jackcess-3.0.1.jar

※SikuliXバグ情報
 sikulix1.1.4以降のloadコマンドにバグがある模様。
 https://bugs.launchpad.net/sikuli/+bug/1789569 
 2.1でFix予定らしい。2.0.4ではOK 2.0.4でもダメな場合がある。
 回避策:下記フォルダに上記jarファイルをコピー後IDEを起動し直すと自動でロードするようだ
 ※AppDataは隠しファイルなので表示できるように設定する(エクスプローラ>表示タブ>隠しファイル)
 C:\Users\<ユーザー名>\AppData\Roaming\Sikulix\Extensions

サンプルコード

# UCanAccessをロードしておく
load(r"C:\ucanaccess\commons-lang3-3.8.1.jar")
load(r"C:\ucanaccess\commons-logging-1.2.jar")
load(r"C:\ucanaccess\hsqldb-2.5.0.jar")
load(r"C:\ucanaccess\jackcess-3.0.1.jar")
load(r"C:\ucanaccess\ucanaccess-5.0.1.jar")

import sys
from java.lang import Class 
from java.sql import DriverManager
from java.sql import PreparedStatement

reload(sys)
sys.setdefaultencoding("utf-8")
# MS-Access ファイル名指定(*.mdb, *.accdb)
MSACCESS_DB = u"jdbc:ucanaccess://C:/sample/test.mdb"
strSQL = u"SELECT * FROM T_通貨 WHERE 通貨コード = ?"

cn = DriverManager.getConnection(MSACCESS_DB) 
st = cn.prepareStatement(strSQL)
st.setString(1, "USD")   # プレースホルダに値を指定
try:
    rs = st.executeQuery()
    while rs.next():
        print rs.getString(u"通貨コード"), rs.getString(u"通貨名") 
except Exception, e:
    print e.args[0]
finally:
    rs.close()
    st.close()
    cn.close()    

結果

USD ドル