cocos2d-x学习笔记17:记录存储2:SQLite基本使用

简介:

 cocos2d-x学习笔记17:记录存储2:SQLite基本使用


一、安装与配置
SQLite是使用非常广泛的嵌入式数据库,它有着0配置,占用资源少等特点。从大型游戏《魔兽世界》到android上的很多游戏和软件(google提供了一个java语言的绑定。)

在cocos2d-x中,我们使用它的C语言绑定。
为了方便和简化篇幅,我们直接使用它的源代码。下载地址:
 
将其解压到cocos2d-x引擎目录下,得到一个“sqlite-amalgamation-3071000”文件夹,里面有四个源文件。

在VC中新建一个项目,起名叫Save。

然后,右键点项目-》属性-》配置属性-》C++-》常规-》附加包含目录
添加刚才的解压的源代码路径。
 
下一步,右键点项目-》添加-》现有项,选择那四个源代码文件。然后SQLite就配置好了。

二、初步使用

在HelloworldScene中,添加


 
 
  1. #include "sqlite3.h" 
然后在init函数中编写代码


 
 
  1. sqlite3 *pDB = NULL;//数据库指针 
  2. char * errMsg = NULL;//错误信息 
  3. std::string sqlstr;//SQL指令 
  4. int result;//sqlite3_exec返回值 
  5.  
  6. //打开一个数据库,如果该数据库不存在,则创建一个数据库文件 
  7. result = sqlite3_open("save.db", &pDB); 
  8. if( result != SQLITE_OK ) 
  9.       CCLog( "打开数据库失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
  10.   
  11.  //创建表,设置ID为主键,且自动增加 
  12. result=sqlite3_exec( pDB, "create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) ) " , NULL, NULL, &errMsg ); 
  13. if( result != SQLITE_OK ) 
  14.       CCLog( "创建表失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
  15.  
  16. //插入数据 
  17. sqlstr=" insert into MyTable_1( name ) values ( '克塞' ) "
  18. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  19. if(result != SQLITE_OK ) 
  20.       CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
  21.  
  22. //插入数据 
  23. sqlstr=" insert into MyTable_1( name ) values ( '葫芦娃' ) "
  24. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  25. if(result != SQLITE_OK ) 
  26.       CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
  27.  
  28. //插入数据 
  29. sqlstr=" insert into MyTable_1( name ) values ( '擎天柱' ) "
  30. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  31. if(result != SQLITE_OK ) 
  32.       CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
  33.  
  34.  //关闭数据库 
  35. sqlite3_close(pDB); 


然后执行项目,你看不到什么东西,因为只是操作了数据库。

三、SQLite数据库管理工具

SQLite Database Browser是一个用Qt编写的跨平台SQLite数据库管理工具。这个工具的特点是非常简单易用, 甚至很多人拿这个修改SQLite游戏存档。(哈哈哈,关于SQLite加密问题,我们以后会讲。)
这里附上他的下载地址:

然后,我们用这个工具,打开项目目录中Resources目录下的save.db,就可以看到刚才生成的数据库数据了。
 
一共三个标签页,DataBase Structure、Browse Data,Execute SQL……意思一目了然,不用多说。是不是很好用啊,哈哈哈。


四、其他常见SQLite操作举例

还是以上面的表举例,直接给出操作代码。具体接口解释可以参考官方文档: http://www.sqlite.org/docs.html
为了突出主要内容,删掉了一些调试信息。

1)更新记录
把第三条改成威震天  

 
 
  1. sqlstr="update MyTable_1 set name='威震天' where ID = 3"
  2.  sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 

2)删除记录
把第二条葫芦娃删了  

 
 
  1. sqlstr="delete from MyTable_1 where ID = 2"
  2.  sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 

3)判断表是否存在
判断表MyTable_1是否存在,保存在isExisted_中。

 
 
  1. bool isExisted_; 
  2. sqlstr="select count(type) from sqlite_master where type='table' and name='MyTable_1'"
  3. sqlite3_exec( pDB, sqlstr.c_str() , isExisted, &isExisted_, &errMsg ); 

这里用到了一个回调函数isExisted,他的定义如下

 
 
  1. int isExisted( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             bool *isExisted_=(bool*)para; 
  3.             *isExisted_=(**column_value)!='0'
  4.             return 0; 

4)判断记录是否存在
判断ID=2的记录是否存在,保存在isExisted_中。

 
 
  1.  bool isExisted_; 
  2. sqlstr="select count(*) from MyTable_1 where ID = 2"
  3. sqlite3_exec( pDB, sqlstr.c_str() , isExisted, &isExisted_, &errMsg ); 
回调函数isExisted的定义,在3)已给出,不再赘述。

5)获得记录条数
获得表MyTable_1的记录条数,保存在count中。  

 
 
  1. int count; 
  2.  sqlstr="select * from MyTable_1"
  3.  sqlite3_exec( pDB, sqlstr.c_str() , loadRecordCount, &count, &errMsg ); 

这里用到了一个回调函数loadRecordCount,他的定义如下

 
 
  1. int loadRecordCount( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             int *count=(int*)para; 
  3.             *count=n_column; 
  4.             return 0; 
 
6)读取一条记录
读取表MyTable_1中ID=3的记录,并打印

 
 
  1. sqlstr="select * from MyTable_1 where ID=3"
  2. sqlite3_exec( pDB, sqlstr.c_str() , loadRecord, NULL, &errMsg ); 

这里用到了一个回调函数loadRecord,他的定义如下

 
 
  1. int loadRecord( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             CCLog("ID=%s,name=%s",column_value[0],column_value[1]); 
  3.             return 0; 









本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/772518 ,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
141 6
|
6天前
|
存储 druid 分布式数据库
列式存储数据库与超市的关系?
列式存储数据库是一种高效的数据管理方式,类似于超市将相似商品集中摆放。它将相同类型的数据(如年龄、价格)归类存储,便于快速查询和压缩,广泛应用于市场分析、财务报告和健康数据分析等领域。知名产品包括HBase、ClickHouse、Druid和Apache Cassandra等,适合处理大规模数据和实时分析任务。
22 4
|
17天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
117 15
|
29天前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
|
22天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
79 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
45 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
44 4
|
2月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
45 2
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
70 3