RubyからODBC経由でMySQL(MariaDB)を使用します。ODBCデータソースの設定及び実行環境は以下となります。
MySQL | 5.5 MySQLのインストール及びmy.iniの設定例 (MariaDB10.0のインストール及びmy.iniの設定例) |
ODBC | Connecter/ODBC 5.3.4 Connector/ODBCのインストール例 |
Ruby | ruby 2.2.0p0(ActiveScriptRuby 32ビット) |
データソースを指定せずに接続するには、driverConnectの接続文字列にMySQLのODBCドライバーを指定します。
「odbc.rb」の説明及びダウンロード
# coding: utf-8 # ODBC->MySQL require "./odbc" class MySqlOdbc < Odbc def initialize super(__ENCODING__) end def execQuery(sSQL) ir = execdirect(sSQL) if ir != 0 sa = "ODBC MySQL SQL error¥r¥n" + getErr + "¥r¥n[" + sSQL + "]¥r¥n" print sa disconnect exit end return ir end end mysqlodbc = MySqlOdbc.new #ir = mysqlodbc.connect("db0","root","root") ir = mysqlodbc.driverConnect("DSN=db0;UID=root;PWD=root") # sconstr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};" + # "SERVER=localhost;PORT=3306;OPTION=0;STMT=SET utf-8;" + # "DATABASE=db0;UID=root;PWD=root" # ir = mysqlodbc.driverConnect(sconstr) if ir != 0 print "接続エラー " + ir.to_s + "¥r¥n" exit end print mysqlodbc.sconstr + "¥r¥n" sSQL = "CREATE TABLE IF NOT EXISTS tbl1 (" + "id int," + "tda datetime," + "cnote char(20)," + "PRIMARY KEY (id)," + "KEY key1 (tda))" + "DEFAULT CHARACTER SET utf8," + "ENGINE=MYISAM" # MariaDBでAriaを使用する場合 #sSQL = "CREATE TABLE IF NOT EXISTS tbl1 (" + # "id int," + # "tda datetime," + # "cnote char(20)," + # "PRIMARY KEY (id)," + # "KEY key1 (tda))" + # "DEFAULT CHARACTER SET utf8," + # "ENGINE=Aria PAGE_CHECKSUM=1 TRANSACTIONAL=1" mysqlodbc.execQuery(sSQL) print "テーブル一覧¥r¥n" ir,ardt = mysqlodbc.tableList ardt.each{|cat, schem, name, type, rem| schem = "" if schem == nil rem = "" if rem == nil print cat + "," + schem + "," + name + "," + type + "," + rem + "¥r¥n" } print "¥r¥n" print ardt[0][2] + "テーブルのカラム¥r¥n" ir,ardt = mysqlodbc.tableColumns(ardt[0][0],ardt[0][1],ardt[0][2]) ardt.each{|arz| sa = "" arz.each{|sb| sb = "" if sb == nil sa += sb + "," } print sa + "¥r¥n" } sSQL = "SELECT max(id) FROM tbl1" mysqlodbc.execQuery(sSQL) ir,ardt = mysqlodbc.getData id = 0 if ardt.length != 0 id = ardt[0].to_i id += 1 end sSQL = "INSERT INTO tbl1 VALUES (" + id.to_s + ",'" + Time.now.strftime("%Y-%m-%d %H:%M:%S") + "'," + "'日本☀☃ニホン123abc')" mysqlodbc.execQuery(sSQL) #データ書き込み print "データ表示¥r¥n" sSQL = "SELECT * FROM tbl1 ORDER BY id DESC LIMIT 5" mysqlodbc.execQuery(sSQL) ir,ardt = mysqlodbc.describeCol print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n" while true do ir,ardt = mysqlodbc.getData if ir == -1 break end print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n" end mysqlodbc.disconnect print "終了¥r¥n" |