cocos2d-x sqlite的读取和相关操作

cocos2d-x的相关读取与应用主要是是通过C语言来实现的,具体要使用的话,需要包含头文件和引入静态库

#include"sqlite3\include\sqlite3.h"
#pragma comment(lib,"sqlite3.lib")

然后使用提供的sqlite3类型来打开数据库,并查询数据

打开数据库方法如下:

//定义一个sqlite3 *对象
sqlite3 *pDB=NULL;
int result=sqlite3_open("数据库地址",&pDB);
if(result==SQLITE_OK){
   打开后的操作
}

查询方法有两种,一种是需要回调的另一种不需要
1.回调式查询

//首先是查询函数的形式
int sqlite3_exec(sqlite3 *pDB,const char *sql,callback,void *para,char *errMsg);
//第一个参数为指向数据库的指针
//第二个参数为sql语句
//第三个参数为callback函数,也就是查询结束后的回调函数,insert和update,delete可以不必使用,填为NULL即可
//第四个参数为用户可以传递任意数据,不使用就填NULL
//第五个参数为错误信息
//接下来是查询函数的回调函数,必须是如下形式
int CallBack(void *para,int nCol,char **colvalue,char **colName);
//4个参数的含义
//第一个参数为上面sqlite3_exec中传入的void指针,不使用也没关系
//第二个参数为一条记录有几个字段
//每条记录的数据,是一个一维数组,注意是一维数组
//每条记录的字段名称
//具体形式如下.经查询
int CallBack(void *para,int nCol,char **colvalue,char **colName){
      for(int i=0;i<nCol;i++){
        log("%s,%s",colName[i],colvalue[i]);
       }
       return 0;
}

//查询结果
xx,xx的形式,前一个是字段名称,后一个是字段值

2.无需回调查询

无需回调查询可以通过sqlite3_get_table的形式来查询,该查询无论成功与否都需要通过sqlite3_free_table释放掉查询结果
下面是具体介绍
函数形式
sqlite3_get_table(sqlite3 *,const char *sql,char ***result,int *nRow,int *nCol,char *errMSg);
第一个参数依然是指向数据库的指针,第二个参数同样是sql语句,第三个参数是查询结果,第四个参数是查询结果有多少行,第五个参数是由多少列,第6个参数是错误信息

需要注意的是,这里的查询结果依然是一个一维数组,但在第一行数据里面存储的是字段名称,举个列子来说明
ID Name classNo.
1 2 3
4 5 6
这是一张简单的表,通过select * from table查询后的查询结果的存储形式是
0 1 3
ID Name classNo.
4 5 6
1 2 3
7 8 9
4 5 6
所以实际的数据是从第二行开始的,第一行仅是字段名称
所以查询后获得结果的过程需要这样写

int index=nCol;//因为实际数据是第二行,这里的index需要指向第二行的位置,也就是0+列数
for(int i=0;i<nRow;i++){
    for(int j=0;j<nCol;i++){
        log("%s,%s",dbresult[j],dbresult[index];//前面是字段名称,后面是值
        ++index;
    }
}

实际上内循环其实是在不断重复第一行的数据以获得字段名称,而数据要从第二行开始,所以参数是index,每次+1,这样就能拿到所有数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值