转cocos2dx官网上的sqlite基础使用

前端之家收集整理的这篇文章主要介绍了转cocos2dx官网上的sqlite基础使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite集成与用法

概述

在Cocos2d-x中,简单数据存储,可以使用UserDefault。那么如何存储大量,不规则的数据?我们可以使用sqlite数据库存储数据。sqlite是使用非常广泛的嵌入式数据库,它有小巧 、高效、跨平台、开源免费和易操作的特点。

sqlite数据库是使用C语言来编写的,那么在Cocos2d-x使用sqlite也是得心应手。

准备

首先创建一个Cocos2d-x v3.x的helloworld工程,我们将以该工程作为sqlite集成与用法的实战工程。

打开终端,使用如下命令新建工程:

1 @H_301_21@
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

使用sqlite

打开HelloWorldScene.cpp文件,我们在里面加入sqlite的使用示例

引入头文件

#include "sqlite3.h" @H_301_21@ @H_301_21@
@H_301_21@ @H_301_21@

创建sqlite 数据库

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; //1 @H_301_21@
std::string path= FileUtils::getInstance()->getWritablePath()+ "save.db" ; //2 @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); //3 @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@
@H_301_21@ @H_301_21@
  1. 数据库指针
  2. 指定数据库的路径
  3. 打开一个数据库,如果该数据库不存在,则创建一个数据库文件

sql语句

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@
  1. 创建表的sql语句

创建Table

3 @H_301_21@
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL); //1 @H_301_21@
(result!=sqlITE_OK) @H_301_21@
"create table Failed" ); @H_301_21@ @H_301_21@
@H_301_21@ @H_301_21@
  1. 创建表

插入数据

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++) //2 @H_301_21@
    { @H_301_21@
    j=0;j<c;j++) @H_301_21@
    { @H_301_21@
    "%s" 301_21@
    } @H_301_21@
    } @H_301_21@
    sqlite3_free_table(re); @H_301_21@ @H_301_21@
    @H_301_21@ @H_301_21@
    1. 查询表中的数据
    2. 查询结果的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一定要注意的内存管理问题,那就是打开数据库之后,数据操作完成之后,一定要关闭数据库,否侧会造成内存泄漏。

    sqlite3_close(pdb); @H_301_21@ @H_301_21@
    @H_301_21@ @H_301_21@

    数据文件存放的位置

    • Android:
    /data/data/com.youCompany.Helloworld/files/save.db @H_301_21@ @H_301_21@
    @H_301_21@ @H_301_21@
    • iOS:

    位于程序沙盒的文档目录下

    ../Documents/save.db @H_301_21@ @H_301_21@
    @H_301_21@ @H_301_21@ 原文链接:https://www.f2er.com/cocos2dx/346394.html

    猜你在找的Cocos2d-x相关文章