我正在使用c ++在Xcode上用Cocos2d-x制作游戏。 我的游戏需要重复访问SQLite数据库文件。我确保游戏配置SQL命令/事务并正确关闭数据库连接。我遇到的一个问题是,在游戏打开/关闭数据库文件大约125次之后,SQLite会出现错误#34;无法打开数据库文件"。 是否有任何我不知道的限制?
以下是我遇到问题的功能。
void HelloWorld::fetchNumberFromDatabaseAfterFirstTime()
{
nextButton->setEnabled(false);
CCLOG("Inside fetch");
int c=0;
sqlite3 *pDB = NULL; //for database path
char* errMsg = NULL; //for error message
string sqlstr; //for sql query string
int result;
string dbPath = CCFileUtils::sharedFileUtils()->getWritablePath();
//cout<<"path"<<dbPath;
dbPath.append("OneWordSubstitution.sqlite");
nextButtonCount++;
CCLOG("nextButtonCount%d",nextButtonCount);
result = sqlite3_open(dbPath.c_str(),&pDB);
if (result != SQLITE_OK)
{
CCLOG("OPENING WRONG, %d, MSG:%s",result,errMsg);
}
else
{
CCLOG("result %d",result);
sqlstr="select * from word_meaning where used = 0";
CCString *number;
CCString* used;
sqlite3_stmt *ppStmt1;
result=sqlite3_prepare_v2(pDB,sqlstr.c_str() , -1, &ppStmt1, NULL);
for (;;) {
result = sqlite3_step(ppStmt1);
if (result == SQLITE_DONE)
break;
if (result != SQLITE_ROW) {
printf("error: %s!\n", sqlite3_errmsg(pDB));
break;
}
number=CCString::create((const char*)sqlite3_column_text(ppStmt1, 1));
used=CCString::create((const char*)sqlite3_column_text(ppStmt1, 2));
databaseArray[c++]=number->getCString();
CCLOG("number %s",number->getCString());
CCLOG("used %s",used->getCString());
}
CCLOG("total limit = %d",c);
lastLimit=c;
sqlite3_close(pDB);
nextButton->setEnabled(true);
} //用于关闭连接
}