cocos2d-x sqlite的读取和相关操作
2015-10-20 00:53
369 查看
cocos2d-x的相关读取与应用主要是是通过C语言来实现的,具体要使用的话,需要包含头文件和引入静态库
然后使用提供的sqlite3类型来打开数据库,并查询数据
打开数据库方法如下:
查询方法有两种,一种是需要回调的另一种不需要
1.回调式查询
//查询结果
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
所以实际的数据是从第二行开始的,第一行仅是字段名称
所以查询后获得结果的过程需要这样写
实际上内循环其实是在不断重复第一行的数据以获得字段名称,而数据要从第二行开始,所以参数是index,每次+1,这样就能拿到所有数据了
#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,这样就能拿到所有数据了
相关文章推荐
- 记录quick cocos2d-x3.2升级至cocos2d-x3.8
- 【复习笔记】 cocos2d-x 2.x 渲染特效实现 三 高斯模糊效果一
- cocos2d-JS开发环境搭建
- Cocos2d-x 3.x RenderTexture渲染纹理源码分析
- cocos2d-x和Android学习思考
- 怎么用 Cocos2d- 3.x 实现 手机震动
- 【复习笔记】 cocos2d-x 2.x 渲染特效实现 二 简单模糊效果
- cocos2d-3.x 学习杂记
- cocos2dx调用android代码,android调用c
- 【Cocos2d-x Lua】数据库封装类型的操作
- cocos2dx 常见的动作汇总
- cocos2dx 使用Json(用于游戏更新)
- cocos2dx 动画常见的特效汇总
- cocos2dx 2.2 的Android交叉编译
- cocos2dx 2.0版本在android下的安装配置问题
- 基于cocos2d-x引擎的游戏框架设计
- Cocos2d-x基础篇C++
- cocos2d-x异步加载纹理真地很渣
- PhysicsEditor 学习
- Cocos2D-x中关于do{}while(0)和CC_BREAK_IF的用法