这是直接把cocos2dx官网的文章复制过来的。
官网地址:
http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/sqlite/zh.md
概述
在Cocos2d-x中,简单数据存储,可以使用UserDefault。那么如何存储大量,不规则的数据?我们可以使用sqlite数据库存储数据。sqlite是使用非常广泛的嵌入式数据库,它有小巧 、高效、跨平台、开源免费和易操作的特点。
sqlite数据库是使用C语言来编写的,那么在Cocos2d-x使用sqlite也是得心应手。
准备
首先创建一个Cocos2d-x v3.x的helloworld工程,我们将以该工程作为sqlite集成与用法的实战工程。
打开终端,使用如下命令新建工程:
- cocos new HelloWorld -p com.your_company.HelloWorld -l cpp
按照上面的操作,我们新建了一个Cocos2d-x v3.x的HelloWorld工程。
iOS/Mac
iOS/Mac的系统库自带sqlite库,我们只需添加libsqlite3.0.dylib库即可。
如何添加libsqlite3.dylib请参考:http://www.cocoachina.com/bbs/read.PHP?tid=79785
Android
Android系统没有自带sqlite库,我们需要手动添加。
1.下载sqlite包
下载地址:http://www.sqlite.org/download.html下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。
2.导入到工程
3.修改Android.mk
使用sqlite
打开HelloWorldScene.cpp文件,我们在里面加入sqlite的使用示例
引入头文件
- #include "sqlite3.h"
创建sqlite 数据库
sql语句
- sql="create table student(ID integer primary key autoincrement,name text,sex text)";//1
- 创建表的sql语句
创建Table
- 创建表
插入数据
- sql="insert into student values(1,'student1','male')";
- result=sqlite3_exec(pdb,NULL);
- if(result!=sqlITE_OK)
- log("insert data Failed!");
- sql="insert into student values(2,'student2','female')";
- result=sqlite3_exec(pdb,NULL);
- if(result!=sqlITE_OK)
- log("insert data Failed!");
- sql="insert into student values(3,'student3',NULL);
- if(result!=sqlITE_OK)
- log("insert data Failed!");
- 向表中插入3条数据
查询
查询结果:
- cocos2d: row is 3,column is 3
- cocos2d: 1
- cocos2d: student1
- cocos2d: male
- cocos2d: 2
- cocos2d: student2
- cocos2d: female
- cocos2d: 3
- cocos2d: student3
- cocos2d: male
我们可以看到查询到结果和我们前面插入的数据一样。
删除
- 删除ID=1的学生
查询结果:
- cocos2d: row is 2,column is 3
- cocos2d: 2
- cocos2d: student2
- cocos2d: female
- cocos2d: 3
- cocos2d: student3
- cocos2d: male
我们可以看到,表中ID=1的数据已经被删除了
注意:
使用sqlite一定要注意的内存管理问题,那就是打开数据库之后,数据操作完成之后,一定要关闭数据库,否侧会造成内存泄漏。
- sqlite3_close(pdb);
数据文件存放的位置
- Android:
- /data/data/com.youCompany.Helloworld/files/save.db
- iOS:
位于程序沙盒的文档目录下
- ../Documents/save.db