(26)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

按照上面的操作,我们新建了一个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
时间: 2024-10-11 06:18:14

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

SQLite集成与用法

本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/sqlite/zh.md 概述 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用SQLite数据库存储数据.SQLite是使用非常广泛的嵌入式数据库,它有小巧 .高效.跨平台.开源免费和易操作的特点. SQL

python类库26[sqlite]

一 sqlite 与 python 的类型对应 二 实例 import sqlite3 def sqlite_basic():    # Connect to db    conn = sqlite3.connect('test.db')    # create cursor    c = conn.cursor()    # Create table    c.execute('''              create table if not exists stocks         

spring集成jms用法

spring集成jms用法 JMS全称java message service,用于发送消息. 1.优势 1.相对RPC达到了解耦的效果:与服务接口名解耦(RPC中更改接口名称,客户端需要做修改).与服务位置解耦(RPC需要配置服务的网络位置才能使用服务).与服务的可用性解耦(RPC中当服务不可用时,客户端也无法正常运行). 2.免去了等待,客户端将消息交给消息代理,然后就可以忙其他的事情了,而不需要阻塞等待. 2.主要概念 1.消息代理:确保信息投递到指定的目的地,同时释放发送者,使其能够继续

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

这两天因为项目须要.研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路. 好在我耗费了N多个毫毫秒秒后稀里哗啦的闯了过来. 在此先吐槽一下.这个云推送尽管没多少东西,但对于初次接触的人来说还是有点不利索的,所以肯定要看官方文档.仅仅是不知是百度哪个哥们做的文档.pdf做的也太不地体贴了:英文字符里面居然有中文空格,拷贝到自己的项目中发现江山一片红,娘的.这猛一看还不一定能看得出来究竟是哪里出了错.

SpringBoot系列之集成Thymeleaf用法手册

目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thymeleaf遍历 3.4).公共模块抽取 3.5).行内写法介绍 3.6).Thymeleaf语法规则 4.SpringBoot集成 4.1).Springboot集成Thymeleaf简介 4.2).Thymeleaf自动配置源码简单分析 SpringBoot系列之Thymeleaf语法简单介绍

SQLite一些函数用法

--格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now','localtime'); --日期时间格式化 select strftime('%Y-%m-%d %H:%M:%S','now','localtime'); --加1小时 select datetime(date('now'),'+1 hour'); --加1小时30分钟 select dateti

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

Cocos2d-x数据篇06:SQLite3数据库基础用法

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2430 [前言] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也

C++ cocos2D等

cocos2dx 官网 SQLite集成与用法