您的位置:首页 > 移动开发 > Cocos引擎

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

2015-10-20 00:53 369 查看
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,这样就能拿到所有数据了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: