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用クラスです。
構造体のメンバー及び内容。構造体は、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_FLAG | 1(0x0001) | フィールドは NULL にできない |
PRI_KEY_FLAG | 2(0x0002) | フィールドはプライマリキーの一部である |
UNIQUE_KEY_FLAG | 4(0x0004) | フィールドはユニークキーの一部である |
MULTIPLE_KEY_FLAG | 8(0x0008) | フィールドは非ユニークキーの一部である |
BLOB_FLAG | 16(0x0010) | フィールドは BLOB または TEXT である |
UNSIGNED_FLAG | 32(0x0020) | フィールドは UNSIGNED 属性を持っている |
ZEROFILL_FLAG | 64(0x0040) | フィールドは ZEROFILL 属性を持っている |
BINARY_FLAG | 128(0x0080) | フィールドは BINARY 属性を持っている |
ENUM_FLAG | 256(0x0100) | フィールドは ENUM である |
AUTO_INCREMENT_FLAG | 512(0x0200) | フィールドは AUTO_INCREMENT 属性を持っている |
TIMESTAMP_FLAG | 1024(0x0400) | フィールドは TIMESTAMP である |
SET_FLAG | 2048(0x0800) | フィールドは SET と定義されている |
PART_KEY_FLAG | 16384(0x1000) | フィールドはマルチインデックスの一部である |
GROUP_FLAG | 32768(0x2000) | フィールドは GROUP BY の一部である |
UNIQUE_FLAG | 65536(0x4000) |
フィールドタイプ
タイプ名(stype) | 値(itype) | 内容 |
---|---|---|
MYSQL_TYPE_DECIMAL | 0 | DECIMAL または NUMERIC フィールド |
MYSQL_TYPE_TINY | 1 | TINYINT フィールド |
MYSQL_TYPE_SHORT | 2 | SMALLINT フィールド |
MYSQL_TYPE_LONG | 3 | INT フィールド |
MYSQL_TYPE_FLOAT | 4 | FLOAT フィールド |
MYSQL_TYPE_DOUBLE | 5 | DOUBLE または REAL フィールド |
MYSQL_TYPE_NULL | 6 | NULL フィールド |
MYSQL_TYPE_TIMESTAMP | 7 | TIMESTAMP フィールド |
MYSQL_TYPE_LONGLONG | 8 | BIGINT フィールド |
MYSQL_TYPE_INT24 | 9 | MEDIUMINT フィールド |
MYSQL_TYPE_DATE | 10 | DATE フィールド |
MYSQL_TYPE_TIME | 11 | TIME フィールド |
MYSQL_TYPE_DATETIME | 12 | DATETIME フィールド |
MYSQL_TYPE_YEAR | 13 | YEAR フィールド |
MYSQL_TYPE_NEWDATE | 14 | Date フィールド (MySQL 5.0 or later) |
MYSQL_TYPE_VARCHAR | 15 | |
MYSQL_TYPE_BIT | 16 | BITフィールド |
MYSQL_TYPE_NEWDECIMAL | 246 | 精密な DECIMAL あるいは NUMERICフィールド |
MYSQL_TYPE_ENUM | 247 | ENUM フィールド |
MYSQL_TYPE_SET | 248 | SET フィールド |
MYSQL_TYPE_TINY_BLOB | 249 | TINYBLOB フィールド |
MYSQL_TYPE_MEDIUM_BLOB | 250 | MEDIUMBLOBフィールド |
MYSQL_TYPE_LONG_BLOB | 251 | LONGBLOB フィールド |
MYSQL_TYPE_BLOB | 252 | BLOB フィールド |
MYSQL_TYPE_VAR_STRING | 253 | VARCHARフィールド |
MYSQL_TYPE_STRING | 254 | CHAR フィールド |
MYSQL_TYPE_GEOMETRY | 255 | 空間フィールド |
実行には、「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
履歴