概述

在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库即可。

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 数据库

    sqlite3 *pdb=NULL;//1
std::string path= FileUtils::getInstance()->getWritablePath()+"save.db";//2 std::string sql;
int result;
result=sqlite3_open(path.c_str(),&pdb);//3
if(result!=SQLITE_OK)
{
log("open database failed, number%d",result);
}
  1. 数据库指针
  2. 指定数据库的路径
  3. 打开一个数据库,如果该数据库不存在,则创建一个数据库文件

SQL语句

    sql="create table student(ID integer primary key autoincrement,name text,sex text)";//1
  1. 创建表的SQL语句

创建Table

    result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);//1
if(result!=SQLITE_OK)
log("create table failed");
  1. 创建表

插入数据

    sql="insert into student  values(1,'student1','male')";
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);
if(result!=SQLITE_OK)
log("insert data failed!"); sql="insert into student values(2,'student2','female')";
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);
if(result!=SQLITE_OK)
log("insert data failed!"); sql="insert into student values(3,'student3','male')";
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);
if(result!=SQLITE_OK)
log("insert data failed!");
  1. 向表中插入3条数据

查询

    char **re;//查询结果
int r,c;//行、列
sqlite3_get_table(pdb,"select * from student",&re,&r,&c,NULL);//1
log("row is %d,column is %d",r,c); for(int i=1;i<=r;i++)//2
{
for(int j=0;j<c;j++)
{
log("%s",re[i*c+j]);
}
}
sqlite3_free_table(re);
  1. 查询表中的数据
  2. 将查询结果的log输出

查询结果:

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

我们可以看到查询到结果和我们前面插入的数据一样。

删除

    sql="delete from student where ID=1";
result=sqlite3_exec(pdb,sql.c_str(), NULL,NULL,NULL);//1
if(result!=SQLITE_OK)
log("delete data failed!");
  1. 删除ID=1的学生

使用上面的查询语句查询删除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

(26)SQLite集成与用法的更多相关文章

  1. SQLite集成与用法

    本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/fra ...

  2. SQLite的基本用法

    SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用. 接下来讲一下怎么创建数据库.通过adb查看数据表和数据.增删查改. 一.创建数据库 Android封装了S ...

  3. 消息推送之百度云推送Android集成与用法

    这两天因为项目须要.研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路. 好在我耗费了N多个毫毫秒秒 ...

  4. SpringBoot系列之集成Thymeleaf用法手册

    目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...

  5. SQLite一些函数用法

    --格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now',' ...

  6. Android SQLite (二) 基本用法

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...

  7. python类库26[sqlite]

    一 sqlite 与 python 的类型对应 二 实例 import sqlite3 def sqlite_basic():     # Connect to db     conn = sqlit ...

  8. 2017.9.26 request请求参数用法

    4.2 访问请求参数 request对象的getParamter()方法,可以用来获取用户(客户端)提交的数据 4.2.1 访问请求参数的方法 String 自符串变量 =request.getPar ...

  9. ibatis集成Sqlite:小数据库也有大作用

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 Ibatis简介: Ibatis是一个类似于Hibernate的数据库ORM(对象关系映射,通俗点就是将数据 ...

随机推荐

  1. iOS根据文字字数动态确定Label宽高

    我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本, 因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高: 在ios 6 的时候可以: -(v ...

  2. GIS-005-Dojo & jQuery 事件处理

    1.添加事件 dojo.connect(dojo.byId("SelectRect"), "onclick", function () { //todo }); ...

  3. Linux printf 命令

    printf 命令用来格式化输出,用法如下: [keysystem@localhost ~]$ printf "%s\n" 1 2 3 4 1 2 3 4 [keysystem@l ...

  4. Triton调试记录

    先编译Release版本 先从下拉列表选择Release-MT-DLL,然后选中Triton-vc14工程, 修改项目属性配置为Release-MT-DLL-NODX,NODX的意思是不使用Direc ...

  5. mysql的if null 的用法

    <!-- 查询 分页查询 --> <select id="queryByPageList" resultMap="weixinActivityResul ...

  6. nano100B的看门狗讲解

    看门狗定时器的用途是在软件出问题时执行系统复位功能,这可以防止系统无限期地挂起.除此之外,看门狗定时器还支持将CPU 从掉电模式唤醒的功能.看门狗定时器包含一个18 位的自由运行计数器,定时溢出间隔可 ...

  7. [直观学习排序算法] 视觉直观感受若干常用排序算法 以及 iOS 资料

    http://www.zhfish.net/?s=点击范围 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则 ...

  8. 《转》python学习(9)字典

    转自 http://www.cnblogs.com/BeginMan/p/3156960.html 一.映射类型 我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的 ...

  9. 【BZOJ2595】[Wc2008]游览计划 斯坦纳树

    [BZOJ2595][Wc2008]游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为 ...

  10. 【BZOJ4094】[Usaco2013 Dec]Optimal Milking 线段树

    [BZOJ4094][Usaco2013 Dec]Optimal Milking Description Farmer John最近购买了N(1 <= N <= 40000)台挤奶机,编号 ...