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,布布扣,bubuko.com

时间: 2024-10-06 03:42:18

cocos2d-x中使用sqlite的相关文章

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

Go语言中使用SQLite数据库

Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 支持database/sql接口,基于cgo(关于cgo的知识请参看官方文档或者本书后面的章节)写的 https://github.com/feyeleanor/gosqlite3 不支持database/sql接口,基于cgo写的 https://github.com/phf/go-sqlite

Android中使用Sqlite数据库 (一) 建表

一.实现一个类,继承SQLiteOpenHelper类,并实现构造函数,onCreate()  onUpgrade() import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; impo

Android中使用Sqlite数据库 (二) 增删改查

定义接口 package com.example.android_db.service; import java.util.List; import java.util.Map; public interface PersonService { public boolean addPerson(Object[] params); public boolean deletePerson(Object[] params); public boolean updatePerson(Object[] p

在Android中利用SQLite实现对数据的增删查改

停更了一天,I'm back again~~当我们需要操作大量的数据时,我们首先想到的当然是数据库,因为可以通过简单的语句实现数据的增删改查,在Android中,我们不使用SQL或者ORACLE,我们使用SQLite,因为它占用资源更少,而语句格式与SQL语句一样. 首先,我们来在Android中实现数据库的创建与增删改查,引用数据库的类时,不再继承常用的Activity类,而是继承Android中的SQLiteOpenHelper,创建一个构造方法,四个参数分别是(Context contex

Swift中使用SQLite的配置方法

Swift 中使用 SQLite 1.准备工作 添加 libsqlite3.dylib 创建 SQLite-Bridge.h SQLite3 框架是一套 C 语言的框架,因此需要添加桥接文件 选择 项目-TARGETS-Build Settings,搜索 Bridg 在 Objective-C Bridging Header 中输入 项目名/SQLite-Bridge.h 如果之前设置过桥接文件,可以直接使用 导入SQLite3.thd头文件 导入成功

sqlite学习笔记9:C语言中使用sqlite之插入数据

前面创建了一张表,现在给他插入一些数据,插入数据跟创建表差不多,仅仅是SQL语言不一样而已,完整代码如下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; int ret =

sqlite学习笔记10:C语言中使用sqlite之查询和更新数据

前面说到的 sqlite_exec() 中的第三个参数, SQLite 将为 sql 参数内执行的每个 SELECT 语句中处理的每个记录调用这个回调函数. 本节添加了两个函数,selectFromTable和updateTable. 实例程序如下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db&quo

sqlite学习笔记11:C语言中使用sqlite之删除记录

最后一节,这里记录下如何删除数据. 前面所有的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲测通过. #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; con

2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET Framework版本与位数所对应的压缩包,里面就会有该文件了). 在所在cs文件中加入using System.Data.SQLite; 定义两个string变量:ConStr.SqlStr,分别用于SQLite的连接字符串与SQL语句. 定义SQLiteConnection变量Conn,用于连