Не могу создать таблицу SQLite в C ++ (Android)

Я делаю Android-игру cocos2dx (c ++) и пытаюсь реализовать SQLite, но не могу даже создать таблицу!

Вот функция, где я открываю базу данных и создаю таблицу внутри:

void HelloWorld::initDB() {

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
std::string wpath = FileUtils::getInstance()->getWritablePath() + "save.db";

FILE *f = fopen(wpath.c_str(), "r");
if (f == NULL) {
firstLogin = true;
} else {
firstLogin = false;
}
fclose(f);
#endif

int result;
result = sqlite3_open(wpath.c_str(), &db);
if (result != SQLITE_OK) {
CCLOG("open database failed, number %d", result);
}

if(firstLogin) {
sql_query("CREATE TABLE IF NOT EXISTS data(variable, value)");
insertVariableInt("coins", 0);
insertVariableInt("timesPlayed", 0);
insertVariableInt("highScore", 0);
}
}

А вот мой sql_query () функция:

int HelloWorld::sql_query(const char * query,int (*callback)(void*,int,char**,char**), void* data)
{
char* errMsg = 0;
int result = sqlite3_exec(db, query, callback, data, &errMsg);
if (errMsg)  {
CCLOG("SQLite3: %s", errMsg);
sqlite3_free(errMsg);
}
return result;
}

Когда я запускаю свою игру, save.db файл создан, но внутри нет таблицы, он пуст! (0 байт). И это не дает мне ошибок, это дает мне просто пустой файл save.db.

Как я могу решить эту проблему? СПАСИБО!

0

Решение

Я проверил ваш код, и я мог бы создать data Таблица.

SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.
sqlite> .tables
data

Я вижу, ты звонишь sql_query только с одним параметром. Вы перегрузили этот метод или определили значения аргументов по умолчанию? В любом случае вот код, который я использую. Обратите внимание, что вы можете позвонить isFileExist вместо fopen,

MainMenu::MainMenu() {
std::string wpath = FileUtils::getInstance()->getWritablePath() + "save.db";
bool firstLogin = FileUtils::getInstance()->isFileExist(wpath);

int result = sqlite3_open(wpath.c_str(), &db);
if (result != SQLITE_OK) {
CCLOG("open database failed, number %d", result);
}

if(firstLogin) {
sql_query("CREATE TABLE IF NOT EXISTS data(variable, value)", nullptr, nullptr);
}
}

int MainMenu::sql_query(const char * query,int (*callback)(void*,int,char**,char**), void* data)
{
char* errMsg = 0;
int result = sqlite3_exec(db, query, callback, data, &errMsg);
if (errMsg)  {
CCLOG("SQLite3: %s", errMsg);
sqlite3_free(errMsg);
}
return result;
}
1

Другие решения

Других решений пока нет …