lua操作数据库
来源:互联网 发布:php分页原理 编辑:程序博客网 时间:2024/05/20 10:11
项目中C对lua只开放了C_updateColumn用于写,C_selectDb用于读。想要把直接一个lua table映射更新到一张数据库表比较烦。
于是写了以下这些函数方便操作。
---一些操作数据库用的工具函数--@author lqkDatabase = {}---生成update需要的a=11,b=22function Database.colValueSet(colValue)local str = ""local substr = ""local bf = falsefor k,v in pairs(colValue) doif type(v) ~= "table" thenk = "`"..k.."`"if type(v) == "string" thenv = "'"..v.."'"endsubstr = k.."="..vif bf == false thenstr = str..substrbf = trueelsestr = str..","..substrendendendreturn strend---返回插入数据库所需要的一些参数--@return col 列名--@return value 值--@return tcol blob列function Database.colValueInsert(colValue)local col = ""local value = ""local tcol = {}local bf = falselocal kblobfor k,v in pairs(colValue) dokblob = kk = "`"..k.."`"if type(v) == "string" thenv = "'"..v.."'"endif type(v) ~= "table" thensubstr = k.."="..vif bf == false thencol = tostring(k)value = tostring(v)bf = trueelsecol = col..","..kvalue = value..","..vendelsetable.insert(tcol, kblob)endendreturn col, value, tcolend---直接插入数据库--@param t 表名--@param data 要存到数据库的内容,是lua 中的table,key是 数据库中的列名。--@return aid,如果失败返回falsefunction Database.insert(t, data)local sqllocal enSuc, enData--普通字段local col, value, tcol = Database.colValueInsert(data)sql = "insert into " .. t .. " (".. col ..") value(".. value ..")"enSuc, enData = C_updateDb(sql)if enSuc == false thenreturn falseend--aidsql = "SELECT LAST_INSERT_ID() as aid"enSuc, enData = C_selectDb(sql)if enSuc == false then--TODO ERRORreturn falseendlocal aid = enData[1].aid--blobif table.getn(tcol) > 0 thenenSuc, enData = C_updateColumn(t, tcol, data, "aid=" .. aid)if enSuc == false thenC_errorLog(space("Database.insert", t, tcol[1], aid))return falseendendreturn aidend---获取数据库的多列--@param t 表名--@param aid 记录aid--@param columns 列名字符串组成的数组--@return key是列名的tablefunction Database.getColumns(t, aid, columns)if t == nil or aid == nil or columns == nil thenreturn falseendif table.maxn(columns) == 0 thenreturn falseendlocal data = {}local sql = "select "for k, v in pairs(columns) dosql = sql..v..","endsql = string.sub(sql, 1, -2)sql = sql.." from "..tsql = sql.." where aid="..aidlocal enSuc, enData = C_selectDb(sql)if enSuc == false thenreturn falseendreturn enData[1]endfunction Database.getColumn(t, aid, column)local columns = {}table.insert(columns, column)local data = Database.getColumns(t, aid, columns)if data == false thenreturn falseendreturn data[column]end---直接插入数据库--@param t 表名--@param data 要存到数据库的内容,是lua 中的table,key是 数据库中的列名。--@return aid,如果失败返回falsefunction Database.setColumns(t, aid, data)if t == nil or aid == nil or data == nil thenreturn falseendlocal sqllocal enSuc, enData--普通字段local col, value, tcol = Database.colValueInsert(data)local cvStr = Database.colValueSet(data)sql = "update "..t.." set "..cvStr.." where aid="..aidenSuc, enData = C_updateDb(sql)if enSuc == false thenC_errorLog(space("Database.setColumns1"))return falseend--blobif table.getn(tcol) > 0 thenenSuc, enData = C_updateColumn(t, tcol, data, "aid=" .. aid)if enSuc == false thenC_errorLog(space("Database.setColumns", t, tcol[1], aid))return falseendendreturn trueend---生成where子句--@param key 字符串,表明哪个字段--@param value 值--@author lqkfunction Database.genWhereSub(key, value)local t = type(value)if t == "number" or t == "string" or t == "boolean" thenreturn " and "..key.."=".."'"..value.."'"elsereturn ""endend
- lua操作数据库
- Lua数据库/MySQL操作
- Lua数据库/MySQL操作
- Lua数据库/MySQL操作
- lua脚本操作redis数据库
- Lua 操作 MongoDB 数据库实例
- 关于lua操作oracle数据库问题总结
- 【Cocos2d-x Lua】操作数据库封装类
- lua对sqlite数据库操作封装
- Redis之使用lua脚本操作redis数据库的原因
- 【Lua】Lua中的Table操作
- lua堆栈操作
- lua 日期时间操作
- lua简单操作sqlite3
- lua操作redis
- lua 操作memcached
- Lua的string操作
- Lua操作详解
- 一些软件设计的原则
- 关于抽取list的一级变量和二级变量
- html基础学习三:文字与段落
- mysql 不能插入中文的解决办法,修改mysql的字符集,操作见蓝色字体部分 .
- 用Spring来发邮件
- lua操作数据库
- php 验证手机号码
- memcached的基本设置
- 存储过程提取Umbraco中的内容
- androird 系统架构图
- js写入和读取Cookie
- javascript 验证手机号码
- 使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存
- Mplayer 移植