Lua中操作数据库封装类
require("serializable")
-- 数据库
DB = class("DB")
DB.instance = nil
function DB:getInstance()
if DB.instance == nil then
DB.instance = DB:create()
end
return DB.instance
end
function DB:create()
local obj= DB.new()
obj:init()
return obj
end
function DB:init()
-- 初始化数据库
local dbPath = string.format("%sdb", CCFileUtils:sharedFileUtils():getWritablePath())
-- 初始化数据库,并创建data表
LocalStorage:localStorageInit(dbPath)
cclog("initDB at %s", dbPath)
end
-- 释放资源
function DB:destory()
LocalStorage:localStorageFree()
end
function isNull( value)
return value == nil or value == ""
end
-- 保存数据,数据库中的值都是以字符串的形式保存的
function DB:setString( key , value )
LocalStorage:localStorageSetItem( key, value );
end
-- 保存一个table
function DB:setTable( key , value )
local str = serializable.serialize(value)
LocalStorage:localStorageSetItem( key, str );
end
-- 根据key获取字符串,default为获取失败时返回的默认值
function DB:getString( key , default)
local value = LocalStorage:localStorageGetItem(key);
if isNull(value) then
return default
end
return value
end
-- 根据key获取数字
function DB:getNumber( key , default)
local value = LocalStorage:localStorageGetItem(key);
if isNull(value) then
return default
end
return tonumber(value)
end
-- 根据key获取table
function DB:getTable( key , default)
local value = LocalStorage:localStorageGetItem(key);
if isNull(value) then
return default
end
value = "return " .. value
local func = loadstring(value)
return func()
end
-- 删除条目
function DB:delete(key)
LocalStorage:localStorageRemoveItem(key);
end
--序列化工具
module("serializable",package.seeall)
-- 序列化
function serialize(obj)
local lua = ""
local t = type(obj)
if t == "number" then
lua = lua .. obj
elseif t == "boolean" then
lua = lua .. tostring(obj)
elseif t == "string" then
lua = lua .. string.format("%q", obj)
elseif t == "table" then
lua = lua .. "{\n"
for k, v in pairs(obj) do
lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
end
local metatable = getmetatable(obj)
if metatable ~= nil and type(metatable.__index) == "table" then
for k, v in pairs(metatable.__index) do
lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
end
end
lua = lua .. "}"
elseif t == "nil" then
return nil
else
error("can not serialize a " .. t .. " type.")
end
return lua
end
-- 反序列化
function unserialize(lua)
local t = type(lua)
if t == "nil" or lua == "" then
return nil
elseif t == "number" or t == "string" or t == "boolean" then
lua = tostring(lua)
else
error("can not unserialize a " .. t .. " type.")
end
lua = "return " .. lua
local func = loadstring(lua)
if func == nil then
return nil
end
return func()
end
--------Cocos Code IDE中使用的代码提示文件,放在源码目录下
--------------------------------
-- @module DB
--------------------------------
-- @function [parent=#DB] setString
-- @param self
-- @param #string key
-- @param #string value
--------------------------------
-- @function [parent=#DB] delete
-- @param self
-- @param #string key
--------------------------------
-- @function [parent=#DB] setTable
-- @param self
-- @param #string key
-- @param #string value
--------------------------------
-- @function [parent=#DB] getString
-- @param self
-- @param #string key
-- @param #string default
-- @return #string ret (return value: string)
--------------------------------
-- @function [parent=#DB] getNumber
-- @param self
-- @param #string key
-- @param #string default
-- @return #int ret (return value: int)
--------------------------------
-- @function [parent=#DB] getTable
-- @param self
-- @param #string key
-- @param #string default
-- @return #table ret (return value: table)
--------------------------------
-- @function [parent=#DB] destory
-- @param self
--------------------------------
-- @function [parent=#DB] getInstance
-- @param self
-- @return DB#DB ret (return value: DB)
return nil
使用示例
lua代码:
require("DB")
-- 保存一个字符串(数据库中存储的数据都是以字符串的形式保存的)
DB:getInstance():setString("level",level)
-- 根据key(isOpenMusic)返回一个数字,第二个参数为默认返回值
local result = DB:getInstance():getNumber("isOpenMusic",1)
-- 根据key(isOpenMusic)返回一个字符串
local result = DB:getInstance():getString("isOpenMusic",1)
-- 保存一个数字
DB:getInstance():setNumber("isOpenMusic",1)
-- 保存一个table到数据库
local test = {1,2,3,4,5}
DB:getInstance():setTable("test",test)
-- 从根据key从数据库中获取一个table
test = DB:getInstance():getTable("test",{}),
相关文章:数据加密