大佬教程收集整理的这篇文章主要介绍了cocos2d-x在Android真机上使用Sqlite数据库,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我是使用sqlite3.c来操作sqlite的,这个库的下载和使用,很多教程上都有介绍。
在win32和MacOS上,这个库的使用没啥特别,但是在Android上,却无法直接读取。
这里要说明,Android不能读取的原因,是因为对数据库的操作必须有root权限,也就是说,@R_379_9616@程序只能对系统提供的特定目录中的数据库文件进行操作。
这个目录,cocos2.1.3可以通过CCFileUtils::sharedFileUtils()->getWritablePath()来获得。
也就是说,我们需要把资源目录下的sliqte库文件,复制到CCFileUtils::sharedFileUtils()->getWritablePath()中,才可以对其进行操作。
对于这种情况,我的解决方案是,在AppDelegate.cpp中,做如下实现
bool isFileExist(const char* pFileName) { if(!pFileName)return false; std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath(); filePath+=pFilename; FILE *pFp = fopen(filePath.c_str(),"r"); CCLog(filePath.c_str()); if(pFp) { fclose(pFp); return true; } return false; } void copyData(const char* pFileName) { std::string strPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(pFileName); unsigned long len=0; unsigned char* data =NULL; data = CCFileUtils::sharedFileUtils()->getFileData(strPath.c_str(),"r",&len); std::string destPath = CCFileUtils::sharedFileUtils()->getWritablePath(); destPath+= pFilename; FILE *pFp=fopen(destPath.c_str(),"w+"); fwrite(data,sizeof(char),len,pFp); fclose(pFp); delete []data; data=NULL; } bool AppDelegate::applicationDidFinishLaunching() { #if (CC_TARGET_PLATFORM !=CC_TARGET_WIN32)//Android下需要复制数据文件 //检查数据库文件是否已经提取 if(isFileExist("dbd_@R_944_9004@save.db")==falsE) { copyData("dbd_@R_944_9004@save.db");//要使用的sqlite库文件 } #endif //下略
在程序启动时,检查SQLite是否存在,不存在,则复制一份
以上是大佬教程为你收集整理的cocos2d-x在Android真机上使用Sqlite数据库全部内容,希望文章能够帮你解决cocos2d-x在Android真机上使用Sqlite数据库所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。