小for的Cocos2d-x学习笔记与感悟12之SQLite数据库

本文小for原创,转载请注明出处。

上一节小for记叙了xml文件保存数据的简单使用方法,并且提到大量的、复杂的数据还是用数据库来保存比较合适。和Android不同的是,Android把SQLite数据库嵌入到系统中,可以直接调用api实现数据库的添删改查或者更复杂的操作,而在Cocos2d-x中我们不能直接使用,后来官方给我们提供了操作SQLite的源码(开源真好)。

首先到http://www.sqlite.org/sqlite-amalgamation-3071000.zip下载我们需要的源码,解压到Cocos2d-x的根目录下,文件夹名为sqlite-amalgamation-3071000,一个四个文件shell.c、shell.h、sqlite3.h、sqlite3ext.h。然后,把这几个源文件放到我们的工程里面。

下面,小for将就创建数据库(文件)、建表、添、删、改、查来记录下SQLite的简单操作。

1、 新建数据库文件

什么都不说了,直接上代码。

sqlite3* pDB=NULL;//数据库指针

char *errMsg=NULL;//错误信息

string sql;                    //sql语句

int result;                     //sqlite3_exec返回值

result=sqlite3_open("test.db",&pDB);

if(result!=SQLITE_OK)

{

      CCLog("打开/新建数据库失败,错误码%d错误原因%s。",result,errMsg);
}

新建数据库和打开数据库都使用这一段断码,和Android一样,如果文件存在,则打开test.db这个数据库文件,如果这个文件不在,就会创建这样一个数据库文件。

2、 建表

剩下建表和添删改都主要是调用接口执行sql命令。

result=sqlite3_exec(pDB,"create table TableName( ID integer primary key autoincrement, name nvarchar(32), age nvarchar(20))", NULL, NULL, &errMsg );
if( result != SQLITE_OK ) 
	CCLog( "创建表失败,错误码%d ,错误原因%s" , result, errMsg ); 

                            这里,小for试了一下,如果在这个表已经存在的情况下,再执行下这句话,                是不会新建表的(其实是意料中的事嘛~)。

3、

sql=" insert into TableName( name ) values ( 'I am testing' ) "; 

result = sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg ); 

if(result != SQLITE_OK ) 

       CCLog( "插入记录失败,错误码:%d ,错误原因:%s " , result, errMsg );

4、

sql="delete from TableName where ID=1"; 

result = sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg ); 

if(result != SQLITE_OK ) 

    CCLog( "删除记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg );

5、

sql="update TableName set age='21' where ID=1"; 

result = sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg ); 

if(result != SQLITE_OK ) 

        CCLog( "修改记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg );

6、

查,稍微要复杂点,而且容易出错,也是最常用的。文中不解释了,将注释都写在代码中。

//接收结果result
char **re;  
//接收结果的行和列
int r,c;  
//SQlite提供的方法,查询,并接收结果
sqlite3_get_table(pDB,"select name from MyTable_1 where ID=1",&re,&r,&c,NULL);
//打印结果
CCLog("-------------------行=%d,列=%d---------------",r,c);
CCLog("-----------------%s-----------------",re[1]); 

这里值得注意的是,最后得到的re这个二维数组就是最后的结果,但是它还包括了属性栏,所以re[0]为name。这里不一定是select name,我们用这个select*也是能实现的,但是要灵活地取得re数组中的值。

 

如果我们尝试往数据库里面存入中文,也是需要用到上一节中提到的WideByte2UTF8方法,将中文转码,符合要求了再放到数据库中。小for在本文中只记录了最简单也是最常用的几种方法,如果看客有更高的需要,我们一起讨论学习吧!

在Android中,小for会把对数据库的操作封装成DBOpenHelper和DataBaseWork两个类。前者是初始化数据库文件的使用调用的,一般只在安装软件后第一次打开的时候才调用,当数据库被意外删除的时候也会调用。后者是常用的操作类,例如添删改查、建表、获得最大值、筛选内容等,在之后的开发中只需要提供参数调用函数即可。

正文结束,闲聊开始。

没想到小for这么快又更新了吧,呵呵,我也没想到。SQLite的使用对于Cocos2d-x的开发应该算是一个里程碑样的功能,就像小for在学习Android时一样。但是,更明确的是,虽然小for一直在拿Android和Cocos2d-x做类比,但是小for还是深知两者不同的,游戏的开发难度更高,需要学的东西可能更多,数据库的操作这些也不是重点(虽然不可缺少)。小for会努力的!向前进,向前进!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值