关于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方法中初始化数据库时设置密码
- 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;
- }
- }
测试工程svn地址:http://code.taobao.org/svn/wxsqlite3_cocos2dx/trunk
@L_502_8@编译到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 |
|
来自CODE的代码片
Android.mk
@H_403_100@
@H_403_100@
@H_403_100@
2.工程中引入wxsqlite3静态库
cocos2d-x3.x:修改cocos2d\cocos\storage\local-storage目录下的Android.mk文件如下
[plain]
copy
@H_403_100@
@H_403_100@
@H_403_100@
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_403_100@
cocos2d-x2.x:修改cocos2d-x-2.x\extensions目录下的Android.mk文件如下,直接把加密功能增加到引擎扩展库
copy
@H_403_100@
@H_403_100@
@H_403_100@
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)
- Box2D)
- sqlite3)##引入模块
@H_403_100@
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)。
@H_403_100@
猜你在找的Cocos2d-x相关文章
2.工程中引入wxsqlite3静态库
cocos2d-x3.x:修改cocos2d\cocos\storage\local-storage目录下的Android.mk文件如下
- 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)#引入模块
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)
- Box2D)
- sqlite3)##引入模块
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)。
@H_403_100@