关于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
  1. voidlocalStorageInit(constchar*fullpath)
  2. {
  3. if(!_initialized){
  4. intret=0;
  5. if(!fullpath)
  6. ret=sqlite3_open(":memory:",&_db);
  7. else
  8. ret=sqlite3_open(fullpath,&_db);
  9. //设置密码
  10. #if(CC_TARGET_PLATFORM!=CC_PLATFORM_WIN32)
  11. sqlite3_key(_db,"test",4);
  12. #endif
  13. localStorageCreateTable();
  14. //SELECT
  15. char*sql_select="SELECTvalueFROMdataWHEREkey=?;";
  16. ret|=sqlite3_prepare_v2(_db,sql_select,-1,&_stmt_select,NULL);
  17. //REPLACE
  18. char*sql_update="REPLACEINTOdata(key,value)VALUES(?,?);";
  19. //DELETE
  20. char*sql_remove="DELETEFROMdataWHEREkey=?;";
  21. if(ret!=sqlITE_OK){
  22. printf("ErrorinitializingDB\n");
  23. //reporterror
  24. }
  25. _initialized=1;
  26. }
  27. }


测试工程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)
  1. include$(CLEAR_VARS)
  2. LOCAL_MODULE:=cocos_localstorage_static
  3. LOCAL_MODULE_FILENAME:=liblocalstorage
  4. LOCAL_SRC_FILES:=LocalStorage.cpp
  5. LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/..
  6. LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../..
  7. LOCAL_CFLAGS+=-Wno-psabi
  8. LOCAL_CFLAGS+=-DsqlITE_HAS_CODEC##该宏用于开启加密功能
  9. LOCAL_EXPORT_CFLAGS+=-Wno-psabi
  10. LOCAL_WHOLE_STATIC_LIBRARIES:=cocos2dx_static
  11. LOCAL_WHOLE_STATIC_LIBRARIES+=wxsqlite3_static#引入静态库
  12. include$(BUILD_STATIC_LIBRARY)
  13. $(callimport-module,.)
  14. $(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)
  • ottom:none;border-left:3px solid rgb(108,cocos2dx)
  • ottom:none;border-left:3px solid rgb(108,CocosDenshion/android)
  • ottom:none;border-left:3px solid rgb(108,cocos2dx/platform/third_party/android/prebuilt/libcurl)
  • ottom:none;border-left:3px solid rgb(108,external/Box2D)
  • ottom:none;border-left:3px solid rgb(108,external/chipmunk)
  • ottom:none;border-left:3px solid rgb(108,external/libwebsockets/android)
  • ottom:none;border-left:3px solid rgb(108,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.编译成功!


    (原文地址: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的更多相关文章

    1. localStorage的过期时间设置的方法详解

      这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2. HTML5 Web缓存和运用程序缓存(cookie,session)

      这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    3. html5超简单的localStorage实现记住密码的功能实现

      这篇文章主要介绍了html5超简单的localStorage实现记住密码的功能实现,非常具有实用价值,需要的朋友可以参考下

    4. 详解前端HTML5几种存储方式的总结

      本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

    5. localstorage和sessionstorage使用记录(推荐)

      通过阅读各路大神对web存储locastorage和sessionstorage的用法解析,深有感触,下面小编把localstorage和sessionstorage使用记录分享到脚本之家平台,供大家参考

    6. PhoneGap / iOS上的SQLite数据库 – 超过5mb可能

      我误解了什么吗?Phonegap中的sqlitedbs真的有5mb的限制吗?我正在使用Phonegap1.2和iOS5.解决方法您可以使用带有phonegap插件的原生sqliteDB,您将没有任何限制.在iOS5.1中,Websql被认为是可以随时删除的临时数据…

    7. ios – 领域:如何获取数据库的当前大小

      是否有RealmAPI方法使用RealmSwift作为数据存储来获取我的RealmSwift应用程序的当前数据库大小?

    8. ios – Realm – 无法使用现有主键值创建对象

      我有一个对象有许多狗的人.应用程序有单独的页面,它只显示狗和其他页面显示人的狗我的模型如下我有人存储在Realm中.人有详细页面,我们取,并显示他的狗.如果狗已经存在,我会更新该狗的最新信息并将其添加到人的狗列表中,否则创建新狗,保存并将其添加到人员列表中.这适用于coredata.在尝试用他的狗更新人时,领域会抛出异常无法使用现有主键值创建对象解决方法这里的问题是,即使你正在创建一个全新的Rea

    9. ios – UIWebView中的WebSQL / SQLite数据库的最大大小(phonegap)

      我知道一般来说,Web应用程序的本地存储空间有5MB的限制.本地网页浏览应用程式是否也有这个限制?

    10. ios – 在iPad Safari上的localStorage是否保持持续?

      我已经看到网络上的意见分歧.据说,从iOS5.1开始,iPad上的HTML5内容的本地数据存储不再保证是持久的,但是在苹果当前的Safari开发者页面(https://developer.apple.com/technologies/safari/html5.html)上,建议离线持久性被保证.有没有人有任何最近的经验与这个问题,并能评论如何可靠的数据库HTML5的功能与Safari在iPad上?

    随机推荐

    1. 【cocos2d-x 3.x 学习笔记】对象内存管理

      Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

    2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

      由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

    3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

      在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

    4. cocos2dx3.x 新手打包APK注意事项!

      这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

    5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

      如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

    6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

      needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

    7. 02 Cocos2D-x引擎win7环境搭建及创建项目

      官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

    8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

      一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

    9. 03 Helloworld

      程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

    10. MenuItemImage*图标菜单创建注意事项

      学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

    返回
    顶部