シナリオ
- DBサーバ:localhost
- DB名:SikuliX
- テーブル:車名コードの コード:296 の車名表示名と車名英文字を取得
- JDBCドライバはMSからダウンロードしmssql-jdbc-x.x.x.jre8.jarをc:¥jdbcにコピーしておく
※SikuliXバグ情報
sikulix1.1.4以降のloadコマンドにバグがある模様。
https://bugs.launchpad.net/sikuli/+bug/1789569
2.1でFix予定らしい。2.0.4ではOK 2.0.4でもだめな場合があった。
回避策:下記フォルダにmssql-jdbc-x.x.x.jre8.jarをコピー後IDEを起動し直すと自動でロードする
※AppDataは隠しファイルなので表示できるように設定する(エクスプローラ>表示タブ>隠しファイル)
C:\Users\<ユーザー名>\AppData\Roaming\Sikulix\Extensions
2.0.1ではこの回避策ではNGだった。クラスNot Foundになる。
java.lang.ClassNotFoundException ( java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver )
サンプルコード
load("C:\jdbc\mssql-jdbc-9.2.0.jre8.jar") # ←ここでJDBCドライバをロードしておく
import sys
from java.lang import Class
from java.sql import DriverManager
from java.sql import PreparedStatement
reload(sys)
sys.setdefaultencoding("utf-8")
dbuser = "ユーザー名"
dbpassword = "パスワード"
url = "jdbc:sqlserver://localhost;database=SikuliX;" + "user=" + dbuser + ";password=" + dbpassword
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
Class.forName(driver).newInstance()
cn = DriverManager.getConnection(url)
sql = u"{call TestSp(?)}"
try:
st = cn.prepareCall(sql)
st.setInt(1, 296)
st.execute()
rs = st.getResultSet()
while rs.next():
print rs.getInt(u"コード"), rs.getString(u"車名表示名"), rs.getString(u"車名英文字")
except Exception, e:
print e.args[0]
finally:
rs.close()
st.close()
cn.close()
結果
296 ホンダ HONDA