テクセル
Ruby用MySQL,MaraiDBライブラリ(Windows用)

mysqllib.rbは、Ruby用MySQL,MariaDBライブラリです。本ライブラリの実行には、libmysql.dll(32ビット用)を必要とします。 Windows上で動作します。

実行環境
rubyのバージョン 2.5.1p57 x86 (RubyInstaller)
MySQLのバージョン 5.5、MaraiDBのバージョン 10.0
mysqllib.rb(Ver.1.08)のダウンロード(mysqllib_V108.7z)

Mysqllibクラス MySql用クラスです。

アクセサ

ilport
MySQLが通信で使うポート番号を指定します。初期値は、3306です。変更する場合は、接続前に設定します。
bipadconv
MySQLへの接続時にホスト名からIPアドレスへの変換を行うかの指定を行います。trueで変換を行います。初期値は、trueです。変更する場合は、接続前に設定します。
sencode
SQL実行結果データの文字エンコーディングの指定を行います。初期値は、「UTF-8」です。nilの場合は、エンコーディングを行いません。
ilRecCount
SQL実行結果における行の数を得ます。
iItemCount
SQL実行結果におけるフィールド数(列数)を得ます。

クラスメソッド

connect(shost,suser,spwd)
MySQLデータベースに接続します。
shost
ホスト名または、IPアドレス
suser
ユーザ名
spwd
パスワード
戻り値
正常時:0 、接続失敗時:0以外
close
MySQLとの接続を閉じます。
戻り値
なし
selectDB(sDBName)
使用するデータベースを選択します。
sDBName
使用するデータベース名
戻り値
正常時:0 、エラー時:0以外
execSQL(sSQL)
SQL文の実行を行います。
sSQL
実行するSQL文
戻り値
正常時:0 、エラー時:0以外
getRecord
SQL実行結果における1レコードを取得します。
戻り値
1レコードのデータ配列。なしの場合は、nil
nextR
SQL実行結果の次のレコードへカーソルを移動します。
戻り値
正常時:0 、レコードなしまたはエラー時:0以外
getfields(icno)
SQL実行結果のフィールド内容を取得します。
icno
フィールド番号を指定(0~)
戻り値
正常時:フィールド内容の構造体 、エラー時:nil

構造体のメンバー及び内容。構造体は、MySQLのMYSQL_FIELD構造体を元にしています。

メンバ名 内容
sname文字 フィールド名
sorg_name文字 フィールド名 ASによる別名使用時は元のフィールド名
stable文字 テーブル名
sorg_table文字 テーブル名 ASによる別名使用時は元のテーブル名
sdb文字 データベース名
scatalog文字 catalog name 内容は、常に「def」
sdef文字 デフォルト値
ilength整数 文字列長または範囲(数値の場合)
imax_length整数 最大文字列長または最大範囲
iname_length整数 フィールド名(sname)の長さ
iorg_name_length整数 sorg_nameの長さ
itable_length整数 テーブル名(stable)の長さ
iorg_table_length整数 sorg_tableの長さ
idb_length整数 データベース名の長さ
icatalog_length整数 scatalogの長さ
idef_length整数 デフォルト値の長さ
iflags整数 フィールドのビットフラグ 下記表参照
idecimals整数 数値フィールドの小数部桁数
icharsetnr整数 フィールドに対するキャラクター・セットナンバー。
ストリングデータタイプで63の場合は、バイナリーデータ
itype整数 フィールドタイプ(数字) 下記表参照
stype文字 フィールドタイプ(文字) 下記表参照

フィールドのビットフラグ。 iflagsは、下記ビットの組み合わせとなります。

フラグ名 内容
NOT_NULL_FLAG1(0x0001) フィールドは NULL にできない
PRI_KEY_FLAG2(0x0002) フィールドはプライマリキーの一部である
UNIQUE_KEY_FLAG4(0x0004) フィールドはユニークキーの一部である
MULTIPLE_KEY_FLAG8(0x0008) フィールドは非ユニークキーの一部である
BLOB_FLAG16(0x0010) フィールドは BLOB または TEXT である
UNSIGNED_FLAG32(0x0020) フィールドは UNSIGNED 属性を持っている
ZEROFILL_FLAG64(0x0040) フィールドは ZEROFILL 属性を持っている
BINARY_FLAG128(0x0080) フィールドは BINARY 属性を持っている
ENUM_FLAG256(0x0100) フィールドは ENUM である
AUTO_INCREMENT_FLAG512(0x0200) フィールドは AUTO_INCREMENT 属性を持っている
TIMESTAMP_FLAG1024(0x0400) フィールドは TIMESTAMP である
SET_FLAG2048(0x0800) フィールドは SET と定義されている
PART_KEY_FLAG16384(0x1000) フィールドはマルチインデックスの一部である
GROUP_FLAG32768(0x2000) フィールドは GROUP BY の一部である
UNIQUE_FLAG65536(0x4000)

フィールドタイプ

タイプ名(stype) 値(itype) 内容
MYSQL_TYPE_DECIMAL0 DECIMAL または NUMERIC フィールド
MYSQL_TYPE_TINY1 TINYINT フィールド
MYSQL_TYPE_SHORT2 SMALLINT フィールド
MYSQL_TYPE_LONG3 INT フィールド
MYSQL_TYPE_FLOAT4 FLOAT フィールド
MYSQL_TYPE_DOUBLE5 DOUBLE または REAL フィールド
MYSQL_TYPE_NULL6 NULL フィールド
MYSQL_TYPE_TIMESTAMP7 TIMESTAMP フィールド
MYSQL_TYPE_LONGLONG8 BIGINT フィールド
MYSQL_TYPE_INT249 MEDIUMINT フィールド
MYSQL_TYPE_DATE10 DATE フィールド
MYSQL_TYPE_TIME11 TIME フィールド
MYSQL_TYPE_DATETIME12 DATETIME フィールド
MYSQL_TYPE_YEAR13 YEAR フィールド
MYSQL_TYPE_NEWDATE14 Date フィールド (MySQL 5.0 or later)
MYSQL_TYPE_VARCHAR15
MYSQL_TYPE_BIT16 BITフィールド
MYSQL_TYPE_NEWDECIMAL246 精密な DECIMAL あるいは NUMERICフィールド
MYSQL_TYPE_ENUM247 ENUM フィールド
MYSQL_TYPE_SET248 SET フィールド
MYSQL_TYPE_TINY_BLOB249 TINYBLOB フィールド
MYSQL_TYPE_MEDIUM_BLOB250 MEDIUMBLOBフィールド
MYSQL_TYPE_LONG_BLOB251 LONGBLOB フィールド
MYSQL_TYPE_BLOB252 BLOB フィールド
MYSQL_TYPE_VAR_STRING253 VARCHARフィールド
MYSQL_TYPE_STRING254 CHAR フィールド
MYSQL_TYPE_GEOMETRY255 空間フィールド
mysqlSetCharacterSet(csname)
クライアント側のキャラクタをセットします。
csname
文字セット名を指定 例:utf-8
戻り値
成功時:0 、エラー発生時:0以外の値
ping
サーバへの接続状態を取得します。
戻り値
接続時:0 、未接続時:0以外の値
getClientVersion
クライアントのバージョンを取得します。(libmysql.dll) 本メソッドは、MySQLに接続していなくても実行可能です。
戻り値
文字列と整数からなる配列 例:["5.0.77", 50077]
getServerVersion
サーバのバージョンを取得します。
戻り値
文字列と整数からなる配列 例:["5.1.56-community", 50156]
errno
直近のMySQL関数で発生したエラーコードを取得します。
戻り値
エラーなし時:0 、エラー発生時:エラーコード(0以外の値)
errmes
直近のMySQL関数で発生したエラーメッセージを取得します。
戻り値
エラーなし時:nil 、エラー発生時:メッセージ文字列(""以外の値)

使用例

実行には、「libmysql.dll」が必要です。同じフォルダに入れて下さい。
MySQLのバージョン:5.5及びMariaDBのバージョン:10.0で確認。
MySQLのインストール及びmy.iniの設定例MariaDBのインストール及びmy.iniの設定例


# coding: utf-8
require "./mysqllib"

class MySql < Mysqllib

   def execQuery(sSQL)

      ir = execSQL(sSQL)
      if ir != 0
         sa = "MySQL SQL error¥r¥n" + "errno = " + errno.to_s + ":" +  errmes + "¥r¥n[" + sSQL + "]¥r¥n"
         print sa
         close
         exit
      end
      return ir
   end

end

mysqldb = MySql.new
#mysqldb.sencode = nil
sServer = "localhost"; sUser = "user"; sPwd = "pwd"   #ユーザ名、パスワード
ir = mysqldb.connect(sServer,sUser,sPwd)
if ir != 0
   print "接続失敗¥r¥n"
   exit
end

mysqldb.mysqlSetCharacterSet("utf8")

sSQL = "CREATE DATABASE IF NOT EXISTS db0"
mysqldb.execQuery(sSQL)

sdb = "db0"
mysqldb.selectDB(sdb)
if ir != 0
   print sdb + "選択失敗¥r¥n"
   mysqldb.close
   exit
end

# MySQLでMYISAMを使用
#sSQL = "CREATE TABLE IF NOT EXISTS tbl5 (" +
#       "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 tbl5 (" +
       "id int," +
       "tda datetime," +
       "cnote char(20)," +
       "PRIMARY KEY (id)," +
       "KEY key1 (tda))" +
       "DEFAULT CHARACTER SET utf8," +
       "ENGINE=Aria PAGE_CHECKSUM=1 TRANSACTIONAL=1"
mysqldb.execQuery(sSQL)

sSQL = "SELECT max(id) FROM tbl5"
mysqldb.execQuery(sSQL)
id = 0
ardt = mysqldb.getRecord
if mysqldb.ilRecCount != 0
   id = ardt[0].to_i
   id += 1
end

sSQL = "INSERT INTO tbl5 VALUES (" +
       id.to_s + ",'" +
       Time.now.strftime("%Y-%m-%d %H:%M:%S") + "'," +
       "'日本☀☃ニホン123abc')"
mysqldb.execQuery(sSQL)

sSQL = "SELECT * FROM tbl5 ORDER BY id DESC LIMIT 5"
mysqldb.execQuery(sSQL)
sa = ""; sb = ""; sp = ""; sc1 = ""; sc2 = ""
for ia in 0..(mysqldb.iItemCount - 1)
   field = mysqldb.getfields(ia)
   sa += sc1 + field.sname
   sb += sc1 + field.stype
   sc1 = ","
   if (field.iflags & Mysqllib::PRI_KEY_FLAG) > 0
      sp += sc2 + field.sname
      sc2 = ","
   end
end
print sa + "¥r¥n" + sb + "¥r¥n"
print "プライマリキー:" + sp + "¥r¥n"
for ia in 1..mysqldb.ilRecCount
   ardt = mysqldb.getRecord
   print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n"
   mysqldb.nextR
end

mysqldb.close
   

履歴

2019.06 Ver.1.08 ruby2.5対応
2013.06 Ver.1.07 アクセサsencode追加、ruby2.0対応
2013.03 Ver.1.06 MySQL5.5対応
2012.11 Ver.1.05 メソッドexecSQLの結果有り無し判定処理追加
2012.10 Ver.1.04 メソッドgetRecordの仕様変更
2012.06 Ver.1.03 メソッドmysqlSetCharacterSet追加
2012.05 Ver.1.02 メソッドgetRecord不具合修正
2012.04 Ver.1.01 メソッドping,getClientVersion,getServerVersion追加
2012.02 Ver.1.00 アクセサilport(ポート番号)追加
2012.01 Ver.0.99 getfieldsメソッド追加
2011.12 Ver.0.98
Rubyユーティリティ
©2011-2019 TEXCELL CORPORATION
テクセル株式会社