使用c ++在Cocos2d-x中多次打开/关闭它们后无法打开SQLite数据库文件

时间:2015-03-26 13:15:58

标签: c++ cocos2d-x

我正在使用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);

} //用于关闭连接

}

0 个答案:

没有答案