Я пишу приложение, использующее базу данных SQLite для хранения информации.Моя таблица базы данных включает 5 полей: gameID (первичный ключ, int), gameName (Varchar), isLocked, isHidden и isFavorite (все bools).Я настроил базу данных с помощью SQLite Manager в FireFox.
+ (void) getInitialDataToDisplay:(NSString *)dbPath {
FightingGamesGuideAppDelegate *appDelegate = (FightingGamesGuideAppDelegate *)[[UIApplication sharedApplication] delegate];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
//My second thought is that this line is incorrect. (see below)
const char *sql = "select gameID, gameName, isLocked, isHidden, isFavorite from GameTable";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
Games *coffeeObj = [[Games alloc] initWithPrimaryKey:primaryKey];
//getGameName
coffeeObj.gameName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
//I think these three lines are where the problem is
coffeeObj.isLocked=(BOOL)sqlite3_column_int(selectstmt, 2);
coffeeObj.isHidden=(BOOL)sqlite3_column_int(selectstmt, 3);
coffeeObj.isFavorite=(BOOL)sqlite3_column_int(selectstmt, 4);
//This line is only to check if the data loaded properly
NSLog(@"%i, %i, %i",isLocked, isHidden, isFavorite);
[appDelegate.coffeeArray addObject:coffeeObj];
[coffeeObj release];
}
}
}
else{
sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.
}
}
Мой вопрос: это как получить bool из базы данных SQLite?Есть ли лучший способ, такой как использование int вместо bool?Если у меня все в порядке с кодом, есть ли у вас какие-либо другие предложения о том, как я могу это сделать?
Я знаю, что код, кроме этих трех строк (и следующей строки), работает правильно.В БД я случайным образом назначил три значения типа «ДА» или «НЕТ».Я также пробовал 1 и 0, безрезультатно.
Если строки правильные, я думаю, что строка 9 неверна.Я изменил его с "const ... =" select gameID, gameName from GameTable ", а gameID и gameName по-прежнему работают должным образом.
Третья мысль: я не обновляю db правильно. Я выиграл 'не вдаваться в это, кроме того, чтобы спросить, есть ли конкретная кнопка «сохранить» / элемент списка. Если я обновлю gameName, которое будет отображаться в моем приложении, я предлагаю сохранить db автоматически.
При просмотре других вопросовЯ только нашел предположения, что CoreData - лучшая идея. Однако, если я на правильном пути, мне нужны только эти три строки, и я закончил (с этой частью).
Кроме того, я знаю, что с переменными bool ничего не делается, кроме как выводить их на консоль. Это мой следующий вызов.
Спасибо за потраченное время!