DB库
DB库是cf框架封装自MySQL 4.0协议实现的客户端连接库, 提供MySQL断线重连、SQL重试、连接池等特性.
API介绍
在使用下面的API之前, 请先确保已经导入库: local DB = require "DB"
.
DB:new(opt)
opt参数是一个lua table. 请根据实际情况传入如下字段:
host - '你的mysql主机名或ip地址'
port - 3306, mysql主机端口
user - '用于连接mysql的用户'
password - '用于连接mysql的密码'
database - 'use db', 可选(optional)
charset - 'utf8', 可选(optional)
local DB = require "DB"
local db = DB:new({
host = 'localhost',
port = 3306;
username = 'root',
username = 'password',
database = 'mysql',
charset = 'utf8mb4', -- 默认为utf8, 请确保此致与table encoding一致, 否则可能会出现插入乱码的情况.
max = 100, -- 不建议超过这个数
})
此方法的返回值为一个db对象.
db:connect()
开始连接MySQL. 连接成功返回True, 否则将会持续进行连接并且输出连接失败原因的日志.
local ok = db:connect()
if not ok then
return print("DB连接失败")
end
print("DB连接成功")
db:query(SQL)
DB初始化完成后即可使用, 否则会提示使用者先初始化.
MySQL查询语句调用方法, SQL为string类型的的一个标准SQL语句.
db:query的参数SQL是一个字符串类型, 内部为原始SQL语句字符串且支持多行表示法, 如:
db:query([[
SELECT
XXX,
XXX,
XXX,
FROM mysql.user
WHERE
1 = 1
ORDER BY id, name DESC
LIMIT 0, 100
]])
使用示例:
local ret, err = db:query("show variables like 'wait_timeout'")
返回值为ret与err. 查询成功ret为一个结果集数组, 在发生错误时未nil, err为错误信息.
db:prepare(SQL)
DB初始化完成后即可使用, 否则会提示使用者先初始化.
此方法遵循MySQL将语句进行预编译.
编译完成并且没有语法错误将会返回一个随机字符串用于标识唯一编译编码.
db:execute(rkey, …)
DB初始化完成后即可使用, 否则会提示使用者先初始化.
此方法将会运行rkey对应的预编译语句, rkey后面的参数为语句参数. 如果没有参数可以忽略.
local rkey = db:prepare("SELECT VERSION() as Version")
local ret, err = db:execute(rkey, args1, args2, args3, ..., argsN)
返回结果等同于db:query(sql)
. 参数内包含特殊字符'
将会被转义.
其它
DB库由class库创建而来. DB库仅作为数据库操作语句;
DB库满足大部分日常SQL查询与联合查询相关使用;
DB库的具体使用方法, 请参考scrit/test_DB.lua
示例;
DB库的charset编码表支持字段如下, 连接使用的charset属性请填写如下Key :
local map = {
_default = 0,
big5 = 1,
dec8 = 3,
cp850 = 4,
hp8 = 6,
koi8r = 7,
latin1 = 8,
latin2 = 9,
swe7 = 10,
ascii = 11,
ujis = 12,
sjis = 13,
hebrew = 16,
tis620 = 18,
euckr = 19,
koi8u = 22,
gb2312 = 24,
greek = 25,
cp1250 = 26,
gbk = 28,
latin5 = 30,
armscii8 = 32,
utf8 = 33,
ucs2 = 35,
cp866 = 36,
keybcs2 = 37,
macce = 38,
macroman = 39,
cp852 = 40,
latin7 = 41,
utf8mb4 = 45,
cp1251 = 51,
utf16 = 54,
utf16le = 56,
cp1256 = 57,
cp1257 = 59,
utf32 = 60,
binary = 63,
geostd8 = 92,
cp932 = 95,
eucjpms = 97,
gb18030 = 248
}
注意
MySQL8.0以上版本使用新版加密方式导致连接失败, 请手动更改为:
mysql_native_password
.预编译语句会掉参数会对特殊字符串转义.
断线重连会自动完成, 并且自动进行预编译.