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是使用非常广泛的嵌入式数据库,它有小巧 、高效、跨平台、开源免费和易操作的特点。
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库即可。

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
2
3
4
5
6
7
8
9
10
|
sqlite3 *pdb=NULL;//1std::string path= FileUtils::getInstance()->getWritablePath()+"save.db";//2std::string sql;int result;result=sqlite3_open(path.c_str(),&pdb);//3if(result!=SQLITE_OK){ log("open database failed, number%d",result);} |
- 数据库指针
- 指定数据库的路径
- 打开一个数据库,如果该数据库不存在,则创建一个数据库文件
SQL语句
|
1
|
sql="create table student(ID integer primary key autoincrement,name text,sex text)";//1 |
- 创建表的SQL语句
创建Table
|
1
2
3
|
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);//1if(result!=SQLITE_OK) log("create table failed"); |
- 创建表
插入数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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!"); |
- 向表中插入3条数据
查询
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
char **re;//查询结果int r,c;//行、列sqlite3_get_table(pdb,"select * from student",&re,&r,&c,NULL);//1log("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); |
- 查询表中的数据
- 将查询结果的log输出
查询结果:
|
1
2
3
4
5
6
7
8
9
10
|
cocos2d: row is 3,column is 3cocos2d: 1cocos2d: student1cocos2d: malecocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male |
我们可以看到查询到结果和我们前面插入的数据一样。
删除
|
1
2
3
4
|
sql="delete from student where ID=1";result=sqlite3_exec(pdb,sql.c_str(), NULL,NULL,NULL);//1if(result!=SQLITE_OK) log("delete data failed!"); |
- 删除ID=1的学生
使用上面的查询语句查询删除ID=1的学生后的数据
查询结果:
|
1
2
3
4
5
6
7
|
cocos2d: row is 2,column is 3cocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male |
我们可以看到,表中ID=1的数据已经被删除了
注意:
使用sqlite一定要注意的内存管理问题,那就是打开数据库之后,数据操作完成之后,一定要关闭数据库,否侧会造成内存泄漏。
|
1
|
sqlite3_close(pdb); |
数据文件存放的位置
- Android:
|
1
|
/data/data/com.youCompany.Helloworld/files/save.db |
- iOS:
位于程序沙盒的文档目录下
|
1
|
../Documents/save.db |
SQLite集成与用法的更多相关文章
- (26)SQLite集成与用法
概述 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用SQLite数据库存储数据.SQLite是使用非常广泛的嵌入式数据库,它有小巧 ...
- SQLite的基本用法
SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用. 接下来讲一下怎么创建数据库.通过adb查看数据表和数据.增删查改. 一.创建数据库 Android封装了S ...
- 消息推送之百度云推送Android集成与用法
这两天因为项目须要.研究了一下百度云推送,本来这事没什么多大工作量的,但注冊百度开发人员账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路. 好在我耗费了N多个毫毫秒秒 ...
- SpringBoot系列之集成Thymeleaf用法手册
目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...
- SQLite一些函数用法
--格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now',' ...
- Android SQLite (二) 基本用法
在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...
- ibatis集成Sqlite:小数据库也有大作用
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 Ibatis简介: Ibatis是一个类似于Hibernate的数据库ORM(对象关系映射,通俗点就是将数据 ...
- Andoird - SQLite 数据库 基础教程
链接来源 http://www.tutorialspoint.com/android/android_sqlite_database.htm SQLite是一个开源的SQL数据库,这个数据库把数据存储 ...
- 数据存储与访问之——初见SQLite数据库
本节引言: 本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这 ...
随机推荐
- Android Studio查看其它APP的布局结构
概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 (2)运行Android Studio,打开 ...
- 安卓edittext实现输入数字限制条件的效果
我们知道edittext能指定输入字符类型,这次我们就来了解下在数字模式下的一些显示控制输入的效果 1.限制输入数字 android:inputType="number|numberDeci ...
- Python学习笔记——安装
最近打算使用下GAE,便准备学习一下python.我对python是一窍不通,因此这里将我的学习历程记录下来,方便后续复习. 安装python: 可以从如下地址:http://www.python.o ...
- IOS7开发~NSAttributedString
从 NSBundle 中读取rtf文本文件的内容,然后用UITextView展示: NSURL *url = [[NSBundle mainBundle] URLForResource:@" ...
- java.io.IOException: Cannot run program "java" (in directory "/data01/var/lib/jenkins/workspace/2540cb62a866eda983ab8cba34fcd4f9"): error=2, No such file or directory
通过下图所示方式,可以在同一台机器上启动多个jenkins slave 执行项目的时候报错: 解决办法:首先排查,目标文件或者目录是否存在,如果存在,则在目录机器添加/usr/bin/java的软链接 ...
- DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法
在操作大量数据时如果发生这种错误,说明不是db2 使用的 package没有绑定,而是 因为资源未释放,导致可以使用此package的资源不足,致使不能连接资源. 在程序中,对PreparedStat ...
- Codis连接异常问题处理
报错信息可以看出:由于没有正常的关闭连接,导致连接异常 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Unex ...
- JAVA Eclipse创建的Android程序如何不显示标题栏
在manifest.xml文件的application节点添加下面一行即可 android:theme="@android:style/Theme.NoTitleBar" 如果要恢 ...
- Java enum枚举的使用方法
一. 出现背景: 在JDK1.5之前,我们定义常量是这种:public static final String RED = "RED"; 在JDK1.5中增加了枚举类型,我们能够把 ...
- kohana nginx的配置
kohana nginx的配置 location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php? kohana_uri=/$1 ...