如何在XCode中的cocos2d-x项目中使用sqlite3

时间:2013-02-18 06:59:18

标签: c++ xcode sqlite cocos2d-x

我从here下载SQLite的C / C ++接口。我得到4个源文件shell.csqlite3.csqlite3.hsqlite3ext.h

现在我将所有这4个文件添加到我的cocos2d-x项目中,并使用以下代码进行测试:

#include "sqlite/sqlite3.h"

sqlite3 *pDB = NULL;
char * errMsg = NULL;
std::string sqlstr;
int result;

result = sqlite3_open("save.db", &pDB);
if( result != SQLITE_OK )
    CCLog( "failed,status_code:%d ,error_msg:%s\n" , result, errMsg );

sqlite3_close(pDB);

然后我跑了。但它构建失败,错误显示如下:

  

复制符号_main in:

     

/Users/tangyue/Library/Developer/Xcode/DerivedData/CrossKaiser-bkepfijxelboxkchsxvcmpozrwlt/Build/Intermediates/CrossKaiser.build/Debug-iphonesimulator/CrossKaiser.build/Objects-normal/i386/main.o

     

/Users/tangyue/Library/Developer/Xcode/DerivedData/CrossKaiser-bkepfijxelboxkchsxvcmpozrwlt/Build/Intermediates/CrossKaiser.build/Debug-iphonesimulator/CrossKaiser.build/Objects-normal/i386/shell.o

     

ld:1个用于体系结构i386 clang的重复符号:错误:链接器

     

命令失败,退出代码为1(使用-v查看调用)

我认为这些文件中必须有main,这会发生此错误。我在文件main中找到shell.c方法。因为我的测试代码中没有包含此文件,所以我将其从项目中删除。

然后我再次运行它。这一次,它建立成功,但result的值是 SQLITE_OK,它是14(SQLITE_CANTOPEN),这意味着'无法打开数据库文件”。

现在我该怎么做才能正确运行程序?什么是shell.c文件用于,并且我从项目中删除它是错误的。

[更新


我解决它使用以下代码:

string dbPath = CCFileUtils::sharedFileUtils()->getWriteablePath();
dbPath.append("save.db");

CCLog("%s", dbPath.c_str());

result = sqlite3_open_v2(dbPath.c_str(), &pDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

而不是

result = sqlite3_open("save.db", &pDB);

1 个答案:

答案 0 :(得分:2)

从项目中删除shell.c。它是使用sqlite数据库的cli工具。它定义了main(),因为它是可执行的。

关于问题的第二部分sqlite3_open: "unable to open database file"