gpt4 book ai didi

android - 在 cocos2d-x 中插入 SQLITE

转载 作者:行者123 更新时间:2023-11-29 17:59:44 25 4
gpt4 key购买 nike

我正在使用 cocos2d-x 在 android 中创建一个需要使用数据库的应用程序。

我在搜索论坛时使用了以下方法在 cocos2d-x 中使用 SQLITE:

  1. 使用 CCFileUtils::getFileData() 将 sqlite 文件读入一个 char*
  2. 使用标准 ofstrem 将 char* 写入 CCFileUtils::getWriteablePath() 中的文件(在 android 中是/data/data/xxx/xx)
  3. 你可以在第 2 步中使用 sqlite3_open() 打开文件

我遇到的问题是,当我插入数据库时​​,原始文件没有被更新,即第 1 步中的 sqlite 文件没有被更新,而第 2 步中的文件被更新。现在,当应用程序重新启动时,步骤 2 中文件中的数据将被覆盖,因此会丢失所有插入数据。

这是我的代码:

string dbPath = CCFileUtils::sharedFileUtils()->getWritablePath();
dbPath.append("DischargedNew.mp3");
unsigned long tmpSize;
unsigned char *xmlData = CCFileUtils::sharedFileUtils()->getFileData("Discharged.mp3", "rb", &tmpSize);
FILE *fp = fopen(dbPath.c_str(), "wb");
fwrite(xmlData, tmpSize, 1, fp);
fclose(fp);

if(result = db->open((char*) dbPath.c_str()))
{
CCLog("DB Opened");
db->query("INSERT INTO USERS (Name, Username, Email) VALUES ('Test Test', 'T', 'test@test.com');");
}
else
{
CCLog("OPENING WRONG, %d, MSG:%s", result, db->getError().c_str());
}


db->close();

最佳答案

assets 文件夹是只读的(并且是打包的),所以如果你想保存任何新的/改变的数据,你唯一可以这样做的地方就是在可写目录中。这意味着只有可写目录中的数据库包含正确和最新的数据,即,只有这个才是实际数据库。

Assets 文件夹中的文件不应被视为实际的数据库文件;将其视为仅帮助您初始化实际数据库的数据。进行任何更改后, Assets 文件夹中的文件已过时。

启动程序时,首先检查可写目录中的数据库文件是否存在。只有当它还不存在时,才通过从 assets 文件夹中复制文件来初始化它。

关于android - 在 cocos2d-x 中插入 SQLITE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com