【Cocos2d-x】集成wxSqlite3到Cocos2d-x

【Cocos2d-x】集成wxSqlite3到Cocos2d-x,第1张

概述关于wxSqlite3 wxSqlite3是一个轻量级的开源数据库项目,基于sqlite3,相比sqlite3增加了数据库加密功能,是用C语言实现的,跨平台。 下载wxsqlite3 下载地址:https://github.com/utelle/wxsqlite3 集成wxsqlite3到Cocos2d-x 1.在cocos2d-x引擎external目录下新建wxsqlite3\src目录 2.


关于wxsqlite3


wxsqlite3是一个轻量级的开源数据库项目,基于sqlite3,相比sqlite3增加了数据库加密功能,是用C语言实现的,跨平台。


下载wxsqlite3


下载地址:https://github.com/utelle/wxsqlite3


集成wxsqlite3到Cocos2d-x


1.在cocos2d-x引擎external目录下新建wxsqlite3\src目录


2.把wxsqlite3-3.1.1\sqlite3\secure\src目录下的.h和.c文件拷贝到wxsqlite3/src目录下



3.添加sqltesecure.c到liblocalstorage项目中。(Cocos2d-x2.x是添加到libExtensions项目)



4.设置预编译宏:sqlITE_HAS_CODEC,该宏用于开启加密功能。



5.相关API


(1). 设置密码(在sqlite3_open和sqlite3_close之间任何地方使用)

int sqlite3_key(
sqlite3 *db,//数据库引用
const voID *pKey,//密码
int nKey //密码长度
);


(2).修改密码(在sqlite3_open和sqlite3_close之间任何地方使用)

int sqlite3_rekey(
sqlite3 *db,//新密码
int nKey //密码长度
);


示例:在localstorage.cpp中的localstorageInit方法中初始化数据库时设置密码

[cpp] view plain copy voIDlocalstorageInit(constchar*fullpath) { if(!_initialized){ intret=0; if(!fullpath) ret=sqlite3_open(":memory:",&_db); else ret=sqlite3_open(fullpath,&_db); //设置密码 #if(CC_TARGET_PLATFORM!=CC_PLATFORM_WIN32) sqlite3_key(_db,"test",4); #endif localstorageCreatetable(); //SELECT char*sql_select="SELECTvalueFROMdataWHEREkey=?;"; ret|=sqlite3_prepare_v2(_db,sql_select,-1,&_stmt_select,NulL); //REPLACE char*sql_update="REPLACEINTOdata(key,value)VALUES(?,?);"; //DELETE char*sql_remove="DELETEFROMdataWHEREkey=?;"; if(ret!=sqlITE_OK){ printf("ErrorinitializingDB\n"); //reporterror } _initialized=1; } } @H_936_301@

测试工程svn地址:http://code.taobao.org/svn/wxsqlite3_cocos2dx/trunk


编译到AndroID


1.在external\wxsqlite目录下添加Android.mk文件,文件内容如下:

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
                           LOCAL_PATH              :=              $(call my-dir              )                                                                  #清理变量定义                                        include $(CLEAR_VARS)                                                                  #模块名称                                        LOCAL_MODulE              := wxsqlite3_static                                                                  #库文件名称                                        LOCAL_MODulE_filename              := libwxsqlite3                                                                  #定义预编译宏                                        LOCAL_CFLAGS              += -DsqlITE_HAS_CODEC              ##该宏用于开启加密功能                                                                  #源文件                                        LOCAL_SRC_fileS              := src/sqlite3secure.c                                                                                            LOCAL_EXPORT_C_INCLUDES              :=              $(LOCAL_PATH              )/src                                                                  #头文件目录                                        LOCAL_C_INCLUDES              :=              )/src                                                                  #构建静态库                                        include $(BUILD_STATIC_liBRARY)                          
来自CODE的代码片 AndroID.mk


2.工程中引入wxsqlite3静态库

cocos2d-x3.x:修改cocos2d\cocos\storage\local-storage目录下的AndroID.mk文件如下

[plain] copy LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_MODulE:=cocos_localstorage_static LOCAL_MODulE_filename:=liblocalstorage LOCAL_SRC_fileS:=localstorage.cpp LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/.. LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../.. LOCAL_CFLAGS+=-Wno-psabi LOCAL_CFLAGS+=-DsqlITE_HAS_CODEC##该宏用于开启加密功能 LOCAL_EXPORT_CFLAGS+=-Wno-psabi LOCAL_WHolE_STATIC_liBRARIES:=cocos2dx_static LOCAL_WHolE_STATIC_liBRARIES+=wxsqlite3_static#引入静态库 include$(BUILD_STATIC_liBRARY) $(callimport-module,.) $(callimport-module,external/wxsqlite3)#引入模块 @H_936_301@

cocos2d-x2.x:修改cocos2d-x-2.x\extensions目录下的AndroID.mk文件如下,直接把加密功能增加到引擎扩展库

LOCAL_MODulE:=cocos_extension_static LOCAL_MODulE_filename:=libextension LOCAL_SRC_fileS:=AssetsManager/AssetsManager.cpp\ ##太长,这里就省略了源文件的导入## LOCAL_WHolE_STATIC_liBRARIES+=cocosdenshion_static LOCAL_WHolE_STATIC_liBRARIES+=cocos_curl_static LOCAL_WHolE_STATIC_liBRARIES+=Box2d_static LOCAL_WHolE_STATIC_liBRARIES+=chipmunk_static LOCAL_WHolE_STATIC_liBRARIES+=libwebsockets_static LOCAL_WHolE_STATIC_liBRARIES+=wxsqlite3_static##引入静态库 LOCAL_CFLAGS+=-DCC_ENABLE_CHIPMUNK_INTEGRATION=1 LOCAL_EXPORT_CFLAGS+=-DCC_ENABLE_CHIPMUNK_INTEGRATION=1 LOCAL_CPPFLAGS+=-DCC_ENABLE_CHIPMUNK_INTEGRATION=1 LOCAL_EXPORT_CPPFLAGS+=-DCC_ENABLE_CHIPMUNK_INTEGRATION=1 LOCAL_CFLAGS:=-fexceptions LOCAL_CFLAGS+=-DsqlITE_HAS_CODEC##该宏用于开启加密功能 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)\ $(LOCAL_PATH)/CCBReader\ $(LOCAL_PATH)/GUI/CCControlExtension\ $(LOCAL_PATH)/GUI/CCScrollVIEw\ $(LOCAL_PATH)/network\ $(LOCAL_PATH)/localstorage\ $(LOCAL_PATH)/CCArmature LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../scripting/lua/cocos2dx_support\ $(LOCAL_PATH)/../scripting/lua/lua include$(BUILD_STATIC_liBRARY) @H_936_301@


3.Cocos2d-x引擎在AndroID平台下默认是通过Jni调用androID sdk自带的sqliteOpenHelper和sqliteDatabase去创建和 *** 作数据库的,所以在AndroID下使用wxsqlite3,需要进行以下几个步骤:

(1).注释localstorage.cpp中对于安卓平台的判断宏



(2).修改AndroID.mk:Cocos2d-x对AndroID平台下数据库的 *** 作封装在localstorageAndroID.cpp,现在修改为使用localstorage.cpp,使用跨平台的wxsqlite3


Cocos2d-x3.0:修改cocos2d\cocos\storage\local-storage目录下的AndroID.mk,删除LOCAL_SRC_fileS字段中的localstorageAndroID.cpp

Cocos2d-x2.0:修改cocos2d-x-2.x\extensions目录下的AndroID.mk,修改LOCAL_SRC_fileS字段中localstorageAndroID.cpp为localstorage.cpp


现在编译工程,就可以了。生成数据库文件应该在/data/data/包名/files目录下,如果加密成功了,使用sqlite查看器打开应该会失败。


编译到IOS


1.打开iOS工程,右键Add file,添加wxsqlite3文件夹到工程。


只保留sqlite3.h和sqlite3secure.c的引用即可。



2.点击工程——Build Settings——设置预编译宏(sqlITE_HAS_CODEC),开启加密功能


3.编译成功!


(原文地址:http://blog.csdn.net/linchaolong/article/details/41286297)


API使用说明:

sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行 *** 作,如果数据库没有加密,执行此函数后进行数据库 *** 作反而会出现“此数据库已加密或不是一个数据库文件”的错误。

int sqlite3_key( sqlite3 *db,const voID *pKey,int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db,"abc",3);

sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常 *** 作数据库,不需要再执行 sqlite3_key。

int sqlite3_rekey( sqlite3 *db,int nKey),参数同上。

清空密钥为 sqlite3_rekey( db,NulL,0)。

总结

以上是内存溢出为你收集整理的【Cocos2d-x】集成wxSqlite3到Cocos2d-x全部内容,希望文章能够帮你解决【Cocos2d-x】集成wxSqlite3到Cocos2d-x所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1082325.html

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

发表评论

登录后才能评论

评论列表(0条)

保存