cocos2d - sqlite 简单使用

首先我这边有一个对sqlite使用的简单封装类DBUtil,这个是前辈留下来的东西,我就直接拿来使用了.

先把类添加进我们的工程中,我们这个是c++的工程:

这是我的项目目录,直接放进去之后编译会报错,有很多个方法找不到,这个时候需要把sqlite的lib库导入到工程中:

然后在链接器-输入-附加依赖项 增加sqlite3.lib

这样编译就可以通过了。如果编译通过说明环境搭好了。

因为我是在lua中调用的,所以我们要先把c++类以及类方法绑到lua中,这个我就不介绍了,可以去网上搜索方法,或者我后面会给一个链接直接看我的方法。

local fullDBPath = cc.FileUtils:getInstance():getWritablePath().."pyf"..".db";

    luaPrint("fullDBPath -------------- "..fullDBPath);
    local db = DBUtil:create();
    local ret = db:InitDB(fullDBPath);

    if ret then
        -- //创建表T_GameInfo
        local createTableSql = "create table T_GameInfo (id integer primary key autoincrement,ip1 integer,ip2 integer,ip3 integer,ip4 integer,ip5 integer,ip6 integer)";
        db:CreateTable(createTableSql, "T_GameInfo");

--db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex1 integer DEFAULT(0)");
        --db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex2 integer DEFAULT(0)");
        --db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex3 integer DEFAULT(0)");
        --db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex4 integer DEFAULT(0)");
        --db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex5 integer DEFAULT(0)");
        --db:ExecSql("ALTER TABLE T_GameInfo ADD COLUMN sex6 integer DEFAULT(0)");

--//
        --//创建表T_GameSource
        local createTableSql1 = "create table T_GameSource (id integer primary key autoincrement,userid integer,userName text,gameName text)";
        db:CreateTable(createTableSql1, "T_GameSource");
        -- db:ExecSql("ALTER TABLE T_GameSource ADD COLUMN time text DEFAULT('')");
        -- db:ExecSql("ALTER TABLE T_GameSource ADD COLUMN bindid integer DEFAULT(0)");
        -- db:ExecSql("ALTER TABLE T_GameSource ADD COLUMN masterID integer DEFAULT(0)");
        --//

--//创建表T_GameData
        local createTableSql2 = "create table T_GameData (id integer primary key autoincrement,userid integer,innings integer,data1 blob,data2 blob)";
        db:CreateTable(createTableSql2, "T_GameData");
        -- db:ExecSql("ALTER TABLE T_GameData ADD COLUMN nameid integer DEFAULT(0)");
        -- db:ExecSql("ALTER TABLE T_GameData ADD COLUMN bindid integer DEFAULT(0)");
        -- //关闭db
        db:CloseDB();  
    end

到了这里我们就创建好了三张表 T_GameInfo  、T_GameSource  、T_GameData

扫描二维码关注公众号,回复: 13257179 查看本文章

但是表中是没有数据的:

有三张表,可是怎么填充数据进去呢,我试了一下:

local sql = "insert into T_GameInfo (ip1,ip2,ip3,ip4,ip5,ip6) values ("
    sql = sql..tonumber(6)..","..tonumber(5)..","..tonumber(4)..","..tonumber(3)..","..tonumber(2)..","..tonumber(1)
    --sql = sql..tonumber(1)..","..tonumber(1)..","..tonumber(0)..","..tonumber(1)..","..tonumber(1)..","..tonumber(0)
    sql = sql..")"; 

    local sql2 = "insert into T_GameSource (userid,userName,gameName) values ("
    sql2 = sql2..tonumber(213695)..","..tostring("'战神'")..","..tostring("'斗地主'")..")"
local sql3 = "insert into T_GameData (userid,innings,data1,data2) values ("
    sql3 = sql3..tonumber(213695)..","..tonumber(520)..","..tostring("'战神儿子'")..","..tostring("'扎金花'")..")"
    
    local db = DBUtil:create();
    local ret = db:InitDB(fullDBPath);
    if ret then
        db:ExecSql(sql);
        db:ExecSql(sql2);
        db:ExecSql(sql3);
	    db:CloseDB();
    end

执行之后我们再看一下有木有数据了:

现在有数据了,数据是我塞进去的那些数据。好了,到了这里就说明,我的这个demo成功了。

这个其实是有很多用处的,保存玩家数据,可以利用这个做游戏的回放功能。储存玩家的信息房间的信息,以及玩家步骤等.

玩家的出牌动作等数据可以直接存二进制文件到数据库中,之后再解析出来,也可以直接存数据包之后再取出来再解析。

还有一种方法就是直接通过写文件的方式把游戏数据全部用二进制保存起来,然后用的时候再解析数据,到场景恢复还原。

猜你喜欢

转载自blog.csdn.net/pyf_914406232/article/details/102823625