关于wxsqlite3
wxsqlite3是一个轻量级的开源数据库项目,基于sqlite3,相比sqlite3增加了数据库加密功能,是用C语言实现的,跨平台。
下载wxsqlite3
下载地址1:http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/
下载地址2:http://pan.baidu.com/s/11wzpk
集成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方法中初始化数据库时设置密码
void localStorageInit( const char *fullpath) { if( ! _initialized ) { int ret = 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 const char *sql_select = "SELECT value FROM data WHERE key=?;"; ret |= sqlite3_prepare_v2(_db,sql_select,-1,&_stmt_select,NULL); // REPLACE const char *sql_update = "REPLACE INTO data (key,value) VALUES (?,?);"; ret |= sqlite3_prepare_v2(_db,sql_update,&_stmt_update,NULL); // DELETE const char *sql_remove = "DELETE FROM data WHERE key=?;"; ret |= sqlite3_prepare_v2(_db,sql_remove,&_stmt_remove,NULL); if( ret != sqlITE_OK ) { printf("Error initializing DB\n"); // report error } _initialized = 1; } }
测试工程svn地址:http://code.taobao.org/svn/wxsqlite3_cocos2dx/trunk
编译到Android
1.在external\wxsqlite目录下添加Android.mk文件,文件内容如下:
2.工程中引入wxsqlite3静态库
cocos2d-x3.x:修改cocos2d\cocos\storage\local-storage目录下的Android.mk文件如下
LOCAL_PATH := $(call my-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) $(call import-module,.) $(call import-module,external/wxsqlite3) #引入模块
cocos2d-x2.x:修改cocos2d-x-2.x\extensions目录下的Android.mk文件如下,直接把加密功能增加到引擎扩展库
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos_extension_static LOCAL_MODULE_FILENAME := libextension LOCAL_SRC_FILES := AssetsManager/AssetsManager.cpp \ ##太长,这里就省略了源文件的导入## LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static 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) $(call import-module,cocos2dx) $(call import-module,CocosDenshion/android) $(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl) $(call import-module,external/Box2D) $(call import-module,external/chipmunk) $(call import-module,external/libwebsockets/android) $(call import-module,external/wxsqlite3) ##引入模块
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.编译成功!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。