Cocos2d-x 3.2 学习笔记(十五)保卫萝卜 场景与数据
![](/assets/blank.gif)
![](/assets/blank.gif)
下载网址: http://www.sqlite.org/download.html。
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
#ifndef __DBUtil__ #define __DBUtil__ #include <string> #include "cocos2d.h" #include "sqlite3.h"using namespace std; USING_NS_CC; class DBUtil{ public:/************************************************************封装 sqlite3操作************************************************************///用来创建一个db数据库 db为数据库的名字// 打开数据库static void initDB(const char *url);//用来判断表格是否存在// name:表示表名static bool tableIsExist(string table_name);//用来创建一个表名为name的表格,创建时会先匹配时否有该表的存在如果存在则不创建//创建表static void createTable(string sql,string table_name);//用来删除一张表名为name的表格,删除时会先匹配是否有该表的存在如果不存在则不执行删除操作//删除表名static void deleteTable(string sql,string table_name);//用来向表中插入一条数据//插入一条数据static void insertData(string sql);//用来向表中删除一条数据//删除一条数据static void deleteData(string sql);//用来向表中修改一条数据// 修改一条数据static void updateData(string sql);//获取表的全部数据// 返回记录的条数static int getAllData(string table_name,std::function<void(std::map<string,string>)> callback);//读取一条记录的信息/** 此方法是查询方法,pSender()*/static void getDataInfo(string sql,std::function<void(std::map<string,string>)> callback);//关闭打开的数据库static void closeDB(); };#endif
DBUtil.h
![](/assets/blank.gif)
![](/assets/blank.gif)
#include "DBUtil.h"sqlite3 *pDB = NULL;//数据库指针 char * errMsg = NULL;//错误信息 std::string sqlstr;//SQL指令 int result;//sqlite3_exec返回值 unsigned int _count=0; std::map<unsigned int,std::function<void(std::map<string,string>)>> _keyMap;void DBUtil::initDB(const char *db) {//打开一个数据库,如果该数据库不存在,则创建一个数据库文件result = sqlite3_open(db, &pDB);if( result != SQLITE_OK )log( "打开数据库失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); }//tableIsExist的回调函数 int isExisted( void * para, int n_column, char ** column_value, char ** column_name ) {bool *isExisted_=(bool*)para;*isExisted_=(**column_value)!='0';return 0; }bool DBUtil::tableIsExist( string table_name ) {if (pDB!=NULL){//判断表是否存在bool tableIsExisted;sqlstr = "select count(type) from sqlite_master where type='table' and name ='"+table_name+"'";result =sqlite3_exec(pDB,sqlstr.c_str(),isExisted,&tableIsExisted,&errMsg);return tableIsExisted;}return false; }void DBUtil::createTable( string sql,string table_name ) {if (!tableIsExist(table_name)){//创建表,设置ID为主键,且自动增加result = sqlite3_exec(pDB,sql.c_str(),NULL,NULL,&errMsg);if( result != SQLITE_OK )log( "创建表失败,错误码:%d ,错误原因:%s\n" , result, errMsg );}}void DBUtil::deleteTable( string sql,string table_name ) {if (tableIsExist(table_name)){result = sqlite3_exec(pDB,sql.c_str(),NULL,NULL,&errMsg);if( result != SQLITE_OK )log( "创建表失败,错误码:%d ,错误原因:%s\n" , result, errMsg );} }//@示例语句sqlstr=" insert into MyTable_1( name ) values ( 'data',..... ) "; void DBUtil::insertData( string sql ){result = sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg );if(result != SQLITE_OK )log( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); }//@示例语句sqlstr="delete from MyTable_1 where ID = 2"; void DBUtil::deleteData( string sql ) {result=sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg );if(result != SQLITE_OK )log( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); }//@示例语句 sqlstr="update MyTable_1 set name='data' where ID = 3"; void DBUtil::updateData( string sql ) {result = sqlite3_exec( pDB, sql.c_str() , NULL, NULL, &errMsg );if(result != SQLITE_OK )log( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); }//getDataCount的回调函数 int loadRecordCount( void *para, int n_column, char ** column_value, char ** column_name ) {std::map<string,string> data;int index;for( index = 0 ; index < n_column; index ++ ){data.insert(std::pair<string,string>( column_name[index], column_value[index] ));}auto num = *(unsigned int *)para;auto callback = _keyMap.at(num);if( callback != nullptr ){callback(data);}return 0; }int DBUtil::getAllData(string table_name,std::function<void(std::map<string,string>)> callback) {string sql = "select * from "+table_name;_count++;_keyMap.insert(std::pair<unsigned int,std::function<void(std::map<string,string>)>>(_count,callback));int count=sqlite3_exec( pDB, sql.c_str() , loadRecordCount, &_count, &errMsg );return count; }//getDataInfo的回调函数 int loadRecord( void * para, int n_column, char ** column_value, char ** column_name ) {std::map<string,string> data;int index;for( index = 0 ; index < n_column; index ++ ){string str1 = column_name[index];if( column_value[index] == NULL ){log("DBUtil Get Data Value Failure! Table Name Is '%s'",str1.c_str());continue;}string str2 = column_value[index];data.insert(std::pair<string,string>(str1,str2));}auto num = *(unsigned int *)para;auto callback = _keyMap.at(num);if( callback != nullptr ){_keyMap.erase(num);callback(data);}return 0; }void DBUtil::getDataInfo( string sql,std::function<void(std::map<string,string>)> callback ) {_count++;_keyMap.insert(std::pair<unsigned int,std::function<void(std::map<string,string>)>>(_count,callback));sqlite3_exec( pDB, sql.c_str() , loadRecord, &_count, &errMsg ); }void DBUtil::closeDB() {sqlite3_close(pDB); }
DBUtil.cpp
![](/assets/blank.gif)
转载于:https://www.cnblogs.com/Richard-Core/p/4229224.html
Cocos2d-x 3.2 学习笔记(十五)保卫萝卜 场景与数据相关推荐
- python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- windows内核开发学习笔记十五:IRP结构
windows内核开发学习笔记十五:IRP结构 IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...
- Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件
Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件 用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很 ...
- IOS之学习笔记十五(协议和委托的使用)
1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...
- Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告
请看之前的:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 话不多说,直接上demo <!DOCTYPE html> <html lang="en"& ...
- 世界是有生命的(通向财富自由之路学习笔记十五)
最近因为工作调度的事情,有了一段空闲的日子,有比较多的时间来回望自己走过的路以及如何走好以后的路.之前忙得很少时间来写博文,很少时间来写读书笔记,逐渐将自己一些很好的习惯丢弃了.从今天起将重拾写博文的 ...
- 前端学习笔记(十五)
第十五章 HTML5新增标签 一.HTML5概述 1.简介 HTML5万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言的第五次大修改.HTML5将成为 HTML.XHTML ...
- 【theano-windows】学习笔记十五——受限玻尔兹曼机
前言 终于到了最喜欢的模型: 受限玻尔兹曼机(RBM)了, 发现关于RBM是如何从能量模型发展过来的介绍非常不错, 而关于详细理论证明, 可以去看我前面的受限玻尔兹曼机的一系列博客. 国际惯例, 参考 ...
- hough变换直线检测_CV学习笔记(十五):直线检测
在这一篇文章中我们将学习使用OpenCV中的 HoughLines 函数和 HoughLinesP 函数来检测图像中的直线. 在这个函数中,使用的是霍夫变换(Hough Transform) 这是计算 ...
- javascript学习笔记(十五) 间歇调用和超时调用
1.超时调用setTimeout() setTimeout() 方法接受两个参数,第一个参数是函数,第二个参数是时间(单位微秒),返回数值ID 1 setTimeout( function () { ...
最新文章
- 工作上996,生活上669,并不是什么难事儿!
- C++Primer Plus (第六版)阅读笔记 + 源码分析【第一章:预备知识】
- Windows 路由追踪tracert命令使用示例
- cython linux so,更改Cython的.so文件命名规则
- switch 根据键盘录入成绩 显示分数及判断等级(第二次)
- [Jarvis OJ - PWN]——Test Your Memory
- T级图片数据Cache思路以及图片服务器搭建方法
- joi模块验证日期格式_python datetime模块详解
- webapi随机调用_BeetleX之webapi验证插件JWT集成
- GitHub | 周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接
- 将10个成绩排序java程序_快速排序——成绩排序
- h5故障代码_H5故障与内机有关?
- 一款ModbusRTU/TCP485串口协议调试软件工具绿色版免安装
- vuecli2+axios 设置多个域名代理
- linux nfs acl 特定ip,Linux NFS配置
- Ubuntu 18.04 LTS 桌面版 WPS 安装字体
- 微信也能鉴别山寨iPhone【微信高级教程2】
- 容斥定理与鸽巢定理(抽屉定理)
- bootstrap文字,图片
- Blogbus博客*