cocos2d-x中使用sqlite
在单机游戏中有几十个场景道具,每一个都有各自的状态(获得、未获得、获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢、可以使用sqlite数据库来完成。
下载地址:http://www.sqlite.org/download.html
下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。
附上使用代码:(如果表不存在,创建两个表、存储两种道具,再获取两个表中的数据)
#include "sqlite/sqlite3.h"
m_pDb = NULL; //sqlite3 *m_pDb; string path = "infor\\data.db"; //创建的txt文本,随便改个后缀名
#if CC_TARGET_PLATFORM != CC_PLATFORM_WIN32
path = CCFileUtils::sharedFileUtils()->getWritablePath()+"infor\\data.db";
#endif CCString sql;
int result;
result = sqlite3_open(path.c_str(), &m_pDb);
if(result != SQLITE_OK)
{
CCLog("open database failed, number%d",result);
m_pDb = NULL;
return;
} // help map
sql = "CREATE TABLE help_map(ID INTEGER PRIMARY KEY,count INTEGER DEFAULT 0)";
result = sqlite3_exec(m_pDb, sql.getCString(), NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("create table failed");
for (int i=0; i<100; ++i)
{
sql.initWithFormat("insert into help_map values(%d, 0)", i+1);
result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("insert data failed!");
} // special tool
sql = "CREATE TABLE special_tool(ID INTEGER PRIMARY KEY,state INTEGER DEFAULT 0,count INTEGER DEFAULT 0)";
result = sqlite3_exec(m_pDb, sql.getCString(), NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("create table failed");
for (int i=0; i<20; ++i)
{
sql.initWithFormat("insert into special_tool values(%d, 0, 0)", i+1);
result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("insert data failed!");
} //select
char **re;
int r,c;
{
//第3个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。
//它内存布局是:第一行是字段名称,后面是紧接着是每个字段的值
// col个数据之后才是表数据,之前的是列名字
result = sqlite3_get_table(m_pDb,"select * from help_map",&re,&r,&c,NULL);
CCLog("help_map: row is %d,column is %d",r,c); m_helpMap.clear();
for (int i=0; i< 100; ++i)
{
CCLog("row %d ---> id = %s, count = %s", i+1, re[c + i*c], re[c + i*c +1]);
int val = CCString(re[c + i*c +1]).intValue();
m_helpMap.push_back(val);
}
sqlite3_free_table(re);
} {
result = sqlite3_get_table(m_pDb,"select * from special_tool",&re,&r,&c,NULL);
CCLog("special_tool row is %d,column is %d",r,c); m_specialItemState.clear();
m_specialItem.clear();
for (int i=0; i< 20; ++i)
{
CCLog("row %d ---> id = %s, state = %s, count = %s", i+1, re[c + i*c], re[c + i*c +1], re[c + i*c + 2]); int val = CCString(re[c + i*c +1]).intValue();
m_specialItemState.push_back(val);
val = CCString(re[c + i*c +2]).intValue();
m_specialItem.push_back(val);
}
sqlite3_free_table(re);
}
其实在程序中存储道具用的vector可以换成一个hash表,因为表中元素的主键是线性增长的,这样访问每个元素的时间复杂度仅o(1)。
data.db(创建的数据库文件)里面插入数据后,想看一下有些什么数据、或者策划人员负责维护里面的数据表,可以下载sqlite database browser,一个非常不错的浏览sqlite数据库的工具。
下载地址:http://sourceforge.net/projects/sqlitebrowser/
cocos2d-x中使用sqlite的更多相关文章
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET
Visual Studio 2010(.NET 4.0)中使用SQLite.NET 2011年4月1日 | 分类: DataBase, DOTNET | 标签: .net 4.0, SQLite. ...
- cocos2d-x 3.0rc2中读取sqlite文件
cocos2d-x 3.0rc2中读取sqlite文件的方式,在Android中直接读取软件内的会失败.须要复制到可写的路径下 sqlite3* dbFile = NULL; std::string ...
- Android虚拟机中的sqlite数据库文件
Android虚拟机中的sqlite数据库文件 ①
- Android中的SQLite使用学习
Android中的SQLite使用学习 SQLite是非常流行的嵌入式关系型数据库,轻载, 速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是 ...
- C#中使用SQLite数据库简介(上)
[SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- Android中使用sqlite笔记
1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...
- 在Win8 Mertro 中使用SQLite
在Win8 Mertro 中使用SQLite 分类: .net 开发 2012-09-19 18:17 1229人阅读 评论(3) ...
- Android 开发中使用 SQLite 数据库
SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能. 此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP ...
- 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET
今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...
随机推荐
- FindBugs Bug Descriptions
FindBugs Bug Descriptions ◇例1: Integer a = ; String str ="; System.out.println(str == a.toStrin ...
- Hadoop 2.2 YARN分布式集群搭建配置流程
搭建环境准备:JDK1.6,SSH免密码通信 系统:CentOS 6.3 集群配置:NameNode和ResourceManager在一台服务器上,三个数据节点 搭建用户:YARN Hadoop2.2 ...
- AIM Tech Round 3
题目链接:(做出几道说几道^_^) A.Juicer B.Checkpoints C.Letters Cyclic Shift 思路: A题每次加上橘子的体积,超过就清零,计数器加1 B题比较 (lo ...
- pku3670 Eating Together
http://poj.org/problem?id=3670 DP,最长不降子序列,O(n*logn)解法 #include <stdio.h> #define N 30030 int n ...
- 转】Maven学习总结(六)——Maven与Eclipse整合
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4052025.html 感谢! 一.安装Maven插件 下载下来的maven插件如下图所示:,插件存放的路径是:E ...
- (转载)Linux启动过程详解
启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘 ...
- uva 796 Critical Links(无向图求桥)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- codeforces 630C Lucky Numbers
C. Lucky Numbers time limit per test 0.5 seconds memory limit per test 64 megabytes input standard i ...
- Linux 系统监控和诊断工具:lsof
1.lsof 简介 lsof 是 Linux 下的一个非常实用的系统级的监控.诊断工具. 它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~ 它可以用来列出被 ...
- when not exists 用法
USE [ChangHong_612]GO/****** Object: StoredProcedure [dbo].[st_MES_UpdateInspectResult] Script Date: ...