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)

  1. local DB = require "DB"
  2. local db = DB:new({
  3. host = 'localhost',
  4. port = 3306;
  5. username = 'root',
  6. username = 'password',
  7. database = 'mysql',
  8. charset = 'utf8mb4', -- 默认为utf8, 请确保此致与table encoding一致, 否则可能会出现插入乱码的情况.
  9. max = 100, -- 不建议超过这个数
  10. })

此方法的返回值为一个db对象.

db:connect()

开始连接MySQL. 连接成功返回True, 否则将会持续进行连接并且输出连接失败原因的日志.

  1. local ok = db:connect()
  2. if not ok then
  3. return print("DB连接失败")
  4. end
  5. print("DB连接成功")

db:query(SQL)

DB初始化完成后即可使用, 否则会提示使用者先初始化.

MySQL查询语句调用方法, SQL为string类型的的一个标准SQL语句.

db:query的参数SQL是一个字符串类型, 内部为原始SQL语句字符串且支持多行表示法, 如:

  1. db:query([[
  2. SELECT
  3. XXX,
  4. XXX,
  5. XXX,
  6. FROM mysql.user
  7. WHERE
  8. 1 = 1
  9. ORDER BY id, name DESC
  10. LIMIT 0, 100
  11. ]])

使用示例:

  1. local ret, err = db:query("show variables like 'wait_timeout'")

返回值为ret与err. 查询成功ret为一个结果集数组, 在发生错误时未nil, err为错误信息.

其它

DB库由class库创建而来. DB库仅作为数据库操作语句;

DB库满足大部分日常SQL查询与联合查询相关使用;

DB库的具体使用方法, 请参考scrit/test_DB.lua示例;

DB库的charset编码表支持字段如下, 连接使用的charset属性请填写如下Key :

  1. local map = {
  2. _default = 0,
  3. big5 = 1,
  4. dec8 = 3,
  5. cp850 = 4,
  6. hp8 = 6,
  7. koi8r = 7,
  8. latin1 = 8,
  9. latin2 = 9,
  10. swe7 = 10,
  11. ascii = 11,
  12. ujis = 12,
  13. sjis = 13,
  14. hebrew = 16,
  15. tis620 = 18,
  16. euckr = 19,
  17. koi8u = 22,
  18. gb2312 = 24,
  19. greek = 25,
  20. cp1250 = 26,
  21. gbk = 28,
  22. latin5 = 30,
  23. armscii8 = 32,
  24. utf8 = 33,
  25. ucs2 = 35,
  26. cp866 = 36,
  27. keybcs2 = 37,
  28. macce = 38,
  29. macroman = 39,
  30. cp852 = 40,
  31. latin7 = 41,
  32. utf8mb4 = 45,
  33. cp1251 = 51,
  34. utf16 = 54,
  35. utf16le = 56,
  36. cp1256 = 57,
  37. cp1257 = 59,
  38. utf32 = 60,
  39. binary = 63,
  40. geostd8 = 92,
  41. cp932 = 95,
  42. eucjpms = 97,
  43. gb18030 = 248
  44. }

注意

  • MySQL8.0以上版本使用新版加密方式导致连接失败, 请手动更改为:mysql_native_password.