关于wxSqlite3
wxSqlite3是一个轻量级的开源数据库项目,基于sqlite3,相比sqlite3增加了数据库加密功能,是用C语言实现的,跨平台。
下载wxsqlite3
下载地址:https://github.com/utelle/wxsqlite3
集成wxsqlite3到Cocos2d-x
1.在cocos2d-x引擎external目录下新建wxsqlite3src目录
2.把wxsqlite3-3.1.1sqlite3securesrc目录下的.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();
-
- 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("ErrorinitializingDBn");
- //reporterror
- }
- _initialized=1;
- }
- }
测试工程svn地址:http://code.taobao.org/svn/wxsqlite3_cocos2dx/trunk
编译到Android
1.在externalwxsqlite目录下添加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:修改cocos2dcocosstoragelocal-storage目录下的Android.mk文件如下
3.Cocos2d-x引擎在Android平台下默认是通过Jni调用android sdk自带的SQLiteOpenHelper和SQLiteDatabase去创建和操作数据库的,所以在Android下使用wxsqlite3,需要进行以下几个步骤:
(2).修改Android.mk:Cocos2d-x对Android平台下数据库的操作封装在LocalStorageAndroid.cpp,现在修改为使用LocalStorage.cpp,使用跨平台的wxsqlite3