前端之家收集整理的这篇文章主要介绍了
转cocos2dx官网上的sqlite基础使用,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在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
@H_ 301_21@
@H_ 301_21@ |
@H_
301_21@
@H_
301_21@
按照上面的操作,我们新建了一个Cocos2d-x v3.x的HelloWorld工程。
iOS/Mac
iOS/Mac的系统库自带sqlite库,我们只需添加libsqlite3.0.dylib库即可。
Android
Android系统没有自带sqlite库,我们需要手动添加。
1.下载sqlite包
下载地址:@L_301_0@http://www.sqlite.org/download.html下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。
2.导入到工程
3.修改Android.mk
打开HelloWorldScene.cpp文件,我们在里面加入sqlite的使用示例
引入头文件
@H_
301_21@
@H_
301_21@
1
@H_301_21@
2
@H_
301_21@
3
@H_
301_21@
4
@H_
301_21@
5
@H_
301_21@
6
@H_
301_21@
7
@H_
301_21@
8
@H_
301_21@
9
@H_
301_21@
10
@H_
301_21@
sqlite3 *pdb=NULL;
@H_301_21@
std::string path= FileUtils::getInstance()->getWritablePath()+
"save.db"
;
@H_ 301_21@
@H_ 301_21@
std::string sql;
@H_ 301_21@
@H_ 404_131@
int
result;
@H_ 301_21@
result=sqlite3_open(path.c_str(),&pdb);
@H_ 301_21@
if
(result!=sqlITE_OK)
@H_ 301_21@
{
@H_ 301_21@
log
(
"open database Failed,number%d"
,result);
@H_ 301_21@
|
@H_
301_21@
@H_
301_21@
- 数据库指针
- 指定数据库的路径
- 打开一个数据库,如果该数据库不存在,则创建一个数据库文件
sql=
"create table student(ID integer primary key autoincrement,name text,sex text)"
//1
@H_301_21@
@H_301_21@
@H_
301_21@
@H_
301_21@
- 创建表的sql语句
创建Table
3
@H_301_21@
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL);
@H_301_21@
(result!=sqlITE_OK)
@H_ 301_21@
|
@H_
301_21@
@H_
301_21@
- 创建表
插入数据
10
@H_301_21@
11
@H_
301_21@
12
@H_
301_21@
13
@H_
301_21@
14
@H_
301_21@
"insert into student values(1,'student1','male')"
;
@H_301_21@
301_21@
(result!=sqlITE_OK)
@H_ 301_21@
"insert data Failed!"
);
@H_ 301_21@
@H_ 404_131@
@H_ 301_21@
"insert into student values(2,'student2','female')"
;
@H_ 301_21@
301_21@
(result!=sqlITE_OK)
@H_ 301_21@
);
@H_ 301_21@
@H_ 301_21@
"insert into student values(3,'student3',monospace!important; font-size:1em!important; min-height:inherit!important">;
@H_ 301_21@
301_21@
(result!=sqlITE_OK)
@H_ 301_21@
向表中插入3条数据
13
@H_301_21@
char
**re;
@H_ 301_21@
r,c;
@H_ 301_21@
sqlite3_get_table(pdb,
"select * from student"
//1
@H_ 301_21@
"row is %d,column is %d"
301_21@
@H_404_131@
@H_301_21@
for
(
i=1;i<=r;i++)
@H_ 301_21@
|
@H_ 301_21@
@H_ 301_21@
- 查询表中的数据
- 将查询结果的log输出
查询结果:
cocos2d: row is 3,column is 3
@H_301_21@
cocos2d: 1
@H_ 301_21@
cocos2d: student1
@H_ 301_21@
cocos2d: male
@H_ 301_21@
@H_ 404_131@
cocos2d: 2
@H_ 301_21@
cocos2d: student2
@H_ 301_21@
cocos2d: female
@H_ 301_21@
cocos2d: 3
@H_ 301_21@
cocos2d: student3
@H_ 301_21@
cocos2d: male
@H_ 301_21@
@H_ 301_21@
@H_ 301_21@
@H_ 301_21@
我们可以看到查询到结果和我们前面插入的数据一样。
4
@H_301_21@
"delete from student where ID=1"
//1
@H_301_21@
"delete data Failed!"
删除ID=1的学生
使用上面的查询语句查询删除ID=1的学生后的数据
7
@H_301_21@
cocos2d: row is 2,monospace!important; font-size:1em!important; min-height:inherit!important">cocos2d: 2
@H_301_21@
cocos2d: student2
@H_ 301_21@
cocos2d: female
@H_ 301_21@
@H_ 404_131@
cocos2d: 3
@H_ 301_21@
cocos2d: student3
@H_ 301_21@
我们可以看到,表中ID=1的数据已经被删除了
注意:
使用sqlite一定要注意的内存管理问题,那就是打开数据库之后,数据操作完成之后,一定要关闭数据库,否侧会造成内存泄漏。
@H_ 301_21@
@H_ 301_21@
数据文件存放的位置
/data/data/com.youCompany.Helloworld/files/save.db
@H_301_21@
@H_301_21@
@H_ 301_21@
@H_ 301_21@
位于程序沙盒的文档目录下
../Documents/save.db
@H_301_21@
@H_301_21@
@H_ 301_21@
@H_ 301_21@ 原文链接:https://www.f2er.com/cocos2dx/346394.html
| | |