SQLite集成与用法

前端之家收集整理的这篇文章主要介绍了SQLite集成与用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这是直接把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集成与用法的实战工程。

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

  1. 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的使用示例

引入头文件

  1. #include "sqlite3.h"

创建sqlite 数据库

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

sql语句

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

创建Table

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

插入数据

  1. sql="insert into student values(1,'student1','male')";
  2. result=sqlite3_exec(pdb,NULL);
  3. if(result!=sqlITE_OK)
  4. log("insert data Failed!");
  5.  
  6. sql="insert into student values(2,'student2','female')";
  7. result=sqlite3_exec(pdb,NULL);
  8. if(result!=sqlITE_OK)
  9. log("insert data Failed!");
  10.  
  11. sql="insert into student values(3,'student3',NULL);
  12. if(result!=sqlITE_OK)
  13. log("insert data Failed!");
  1. 向表中插入3条数据

查询

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

查询结果:

  1. cocos2d: row is 3,column is 3
  2. cocos2d: 1
  3. cocos2d: student1
  4. cocos2d: male
  5. cocos2d: 2
  6. cocos2d: student2
  7. cocos2d: female
  8. cocos2d: 3
  9. cocos2d: student3
  10. cocos2d: male

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

删除

  1. sql="delete from student where ID=1";
  2. result=sqlite3_exec(pdb,NULL);//1
  3. if(result!=sqlITE_OK)
  4. log("delete data Failed!");
  1. 删除ID=1的学生

使用上面的查询语句查询删除ID=1的学生后的数据

查询结果:

  1. cocos2d: row is 2,column is 3
  2. cocos2d: 2
  3. cocos2d: student2
  4. cocos2d: female
  5. cocos2d: 3
  6. cocos2d: student3
  7. cocos2d: male

我们可以看到,表中ID=1的数据已经被删除

注意:

使用sqlite一定要注意的内存管理问题,那就是打开数据库之后,数据操作完成之后,一定要关闭数据库,否侧会造成内存泄漏。

  1. sqlite3_close(pdb);

数据文件存放的位置

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

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

  1. ../Documents/save.db

猜你在找的Sqlite相关文章