cocos2dx制作的游戏怎么访问数据库的

cocos2dx制作的游戏怎么访问数据库的,第1张

sqlite3.c来 *** 作sqlite的,这个库的下载和使用,很多教程上都有介绍。

在win32和MacOS上,这个库的使用没啥特别,但是在Android上,却无法直接读取。

这里要说明,Android不能读取的原因,是因为对数据库的 *** 作必须有root权限,也就是说,我们的应用程序只能对系统提供的特定目录中的数据库文件进行 *** 作。

这个目录,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_user_save.db")==false)

{

copyData("dbd_user_save.db")//要使用的sqlite库文件

}

#endif

//下略

在程序启动时,检查sqlite是否存在,不存在,则复制一份。

转载自,你再研究下

http://blog.csdn.net/xujiayin/article/details/9221851

1)下载sqlite源代码,并解压到工程中[这步不需要了,cocos2dx中已经加入了sqlite,只需引用头文件sqlite3.h就可以了]:

减压到工程中(shell.c不需要),在xcode中如下:

2) 打开数据库:

先用sqlite工具创建一个数据库,叫test.db;(工具可以使用sqlite提供的命令行工具;在sqlite下载页面中的Precompiled Binaries );

把test.db拷贝到Resource文件夹下,并加入工程,如下图:

然后调用如下代码,打开数据库:

[cpp] view plaincopy

std::string filename = CCFileUtils::sharedFileUtils()->fullPathForFilename("test.db")

result = sqlite3_open(filename.c_str(), &pDB)

CCLog(filename.c_str())

if( result != SQLITE_OK )

CCLog( "打开数据库失败,错误码:%d ,错误原因:%s\n" , result, errMsg )

else

CCLog("成功地打开了数据库")

3)创建表和插入数据:

[html] view plaincopy

//创建表,设置ID为主键,且自动增加

result=sqlite3_exec( pDB, "create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) ) " , NULL, NULL, &errMsg )

if( result != SQLITE_OK )

CCLog( "创建表失败,错误码:%d ,错误原因:%s\n" , result, errMsg )

//插入数据

sqlstr=" insert into MyTable_1( name ) values ( '克塞' ) "

result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg )

if(result != SQLITE_OK )

CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg )

//插入数据

sqlstr=" insert into MyTable_1( name ) values ( '葫芦娃' ) "

result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg )

if(result != SQLITE_OK )

CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg )

//插入数据

sqlstr=" insert into MyTable_1( name ) values ( '擎天柱' ) "

result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg )

if(result != SQLITE_OK )

CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg )

4)查询

对数据库进行查询,有两种方式:1)sqlite3_prepare_v2 + sqlite3_step + sqlite3_column_text + sqlite3_finalize2) sqlite3_exec


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9910055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存