【Cocos2d-x Lua】操作数据库封装类


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",{}),



相关文章:数据加密




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值