如何在你的cocos2dx中使用sqlite3

如何在你的cocos2dx中使用sqlite3,第1张

概述从性能上说,XML方式的存储基本可以满足1 MB以下的存储要求。但在更复杂的情景中,我们可能需要存储多种不同的类,每个类也需要存储不同的对象,此时XML存储的速度就将成为瓶颈。即便分文件存储,管理起来也很麻烦,这个时候可以引入数据库来提升存储效率。  关系数据库是一种经典的数据库,其中的数据被组织成表的形式,具有相同形式的数据存放在同一张表中,表内每一行代表一个数据。在表的基础上,数据库为我们提 从性能上说,XML方式的存储基本可以满足1 MB以下的存储要求。但在更复杂的情景中,我们可能需要存储多种不同的类,每个类也需要存储不同的对象,此时XML存储的速度就将成为瓶颈。即便分文件存储,管理起来也很麻烦,这个时候可以引入数据库来提升存储效率。
 关系数据库是一种经典的数据库,其中的数据被组织成表的形式,具有相同形式的数据存放在同一张表中,表内每一行代表一个数据。在表的基础上,数据库为我们提供增、删、改、查等 *** 作,这些 *** 作通常采用sql(结构化查询语言)表达。这种格式化、集中的存储再加上结构化的 *** 作语言带来一个非常大的好处:可以进行深度的优化,大大提升存储和 *** 作的效率。
 sqlite是移动设备上常用的一个嵌入式数据库,具有开源、轻量等特点,其源代码只有两个".c"文件和两个".h"文件,并且已经包括了充分的@R_419_6747@。相比MysqL或者sql Server这样的专业级数据库,甚至是比起同样轻量级的Access,sqlite的部署都可谓非常简单,只要将这4个文件导入工程中即可,这使得编译之后的sqlite非常小。

 sqlite将数据库的数据存储在磁盘的单一文件中,并通过简单的外部接口提供sql支持。由于其设计之初即是针对小规模数据的 *** 作,在查询优化、高并发读写等方面做了极简化的处理,可以保证不占用系统额外的资源,因此,在大多数的嵌入式开发中,会比专业数据库有更快速、高效的执行效率。


好了,看看如何加入sqlite3吧,先从官网http://www.sqlite.org/download.HTML,下载你所想要的版本的sqlite,我这下的是3.8.2的,在解压后,只有4个文件,没有.def或者是什么dll,lib,这个是要自己生成的。


解压后,将这四个文件添加到你的当前工程中,然后进行编译一下就可以了。


好了,先看个如何创建一个表:

[cpp] view plain copy 回调函数的格式如下: intsqlite_callback( voID*pv,/*由sqlite3_exec()的第四个参数传递而来*/ intargc,0); background-color:inherit">/*表的列数*/ char**argv,0); background-color:inherit">/*指向查询结果的指针数组,可以由sqlite3_column_text()得到*/ char**col/*指向表头名的指针数组,可以由sqlite3_column_name()得到*/ ); 参数格式: 传给sqlite3_exec的回调函数,用来显示查询结果 对每一条查询结果调用一次该回调函数 参数: pv:由sqlite3_exec传递的初始化参数 argc:表头的列数 col:表头的名字数组指针 argv:表头的数据数组指针 返回值: 1:中断查找 0:继续列举查询到的数据 示例表: +-----------------------------------+ |ID|pic|data(16进制数据)| |-----------------------------------| |1|a.jpg|000000...| |2|b.jpg|XXXXXX| 对第一行数据: argc=3即[0]...[2] argv[0]="1",argv[1]="a.jpg",argv[2]="000000..."(实际16进制数据,非这里显示的字符串形式) col[0]="ID",col[1]="pic",col[2]="data" 说明: sqlite3_exec()的回调函数必须按照此格式,当然形参的名字任意. 如果某列的数据类型不是char*,则可以对结果执行相关的转换,如:用atoi()把结果转换为整数(integer),如果是二进制数据,则可以直接强制类型转换,如:(voID*)argv[i]. 该回调函数有两种返回值类型. 1.返回零:sqlite3_exec()将继续执行查询. 2.返回非零:sqlite3_exec()将立即中断查询,且sqlite3_exec()将返回sqlITE_ABORT. 示例: inti; for(i=0;i<argc;i++) { printf("%s\t%s\n\n",col[i],argv[i]); } 例子: m_pGameDataBase=preparetableInDB("MyGame2","E:\database\MyGame"); std::stringinsert_sql_("insertintoMyGame2values(123,\"aaa\",26,\"man\")"); insertRecordIntosqlite(insert_sql_); readRecord();//readtherecord // intreadFromsqlite(voID*anyParam,intiColumn,87); background-color:inherit; Font-weight:bold">char**pColumnValue,87); background-color:inherit; Font-weight:bold">char**pColumnname){ inticolumenCount=iColumn; for(inti=0;i<icolumenCount;++i){ cclOG("%s:%s\n",pColumnname[i],pColumnValue[i]); return0; voIDGameController::readRecord(){ std::stringread_sql_("select*fromMyGame2"); char*perrMsg=0; sqlite3_exec(m_pGameDataBase, read_sql_.c_str(), readFromsqlite,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> NulL,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> &perrMsg); sqlite3*GameController::preparetableInDB(constchar*table,char*dbfilename){ sqlite3*splite2Data=0; char*errMsg=0; if(sqlITE_OK!=sqlite3_open(dbfilename,&splite2Data)){ cclOG("OpentheGameDatatablefalIEd\n"); return0; } std::stringstring_sql="createtableifnotexists"+std::string(table)+"(IDintunsignedauto_incrementprimarykey,namevarchar(50),ageint,sexvarchar(10))"; sqlite3_exec(splite2Data,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> string_sql.c_str(),108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> NulL,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> &errMsg);//createatable; if(errMsg!=0){ cclOG("CreatetheDatatableFailed\n"); sqlite3_close(splite2Data); returnsplite2Data; voIDGameController::insertRecordIntosqlite(std::string&r_stringOrder){ char*perrMsg=0; intinfo=sqlite3_exec(m_pGameDataBase, r_stringOrder.c_str(),248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> 0,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> 0,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> &perrMsg); do{ if(perrMsg!=0){//executetheinstructFailed cclOG("insertarecordintothetableFailed\n"); cclOG("reason:%d,ErrorMessage:%s\n",info,perrMsg); break; }while(0); sqlite3_close(m_pGameDataBase); } 总结

以上是内存溢出为你收集整理的如何在你的cocos2dx中使用sqlite3全部内容,希望文章能够帮你解决如何在你的cocos2dx中使用sqlite3所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1074041.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存