Ich schreibe eine Anwendung, die eine SQLite-Datenbank zum Speichern von Informationen verwendet. Meine DB-Tabelle enthält 5 Felder: gameID (der Primärschlüssel, int), gameName (Varchar), isLocked, isHidden und isFavorite (alle bools). Ich habe die Datenbank mit dem SQLite Manager in FireFox eingerichtet.
+ (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.
}
}
Meine Frage: Ist dies, wie man ein bool aus einer SQLite-Datenbank zu erhalten? Gibt es einen besseren Weg, wie z. B. die Verwendung eines int als bool stattdessen? Wenn mein Code korrekt ist, haben Sie einen anderen Vorschlag, wie ich das machen kann?
Ich weiß, dass der Code abgesehen von diesen drei Zeilen (und der folgenden Zeile) ordnungsgemäß funktioniert. In der Datenbank habe ich die drei Bools nach dem Zufallsprinzip auf YES oder NO gesetzt. Ich habe auch 1 und 0 ausprobiert, aber ohne Erfolg.
Wenn die Zeilen richtig sind, ist mein zweiter Gedanke, dass die Zeile 9 falsch ist. Ich habe sie von "const ... ="select gameID, gameName from GameTable" geändert, und gameID und gameName funktionieren immer noch richtig.
Mein dritter Gedanke ist, dass ich die Datenbank nicht richtig aktualisiere. Ich werde nicht in das gehen, außer zu fragen, ob es eine bestimmte "Speichern" Schaltfläche/Liste Element. Wenn ich ein gameName aktualisieren, zeigt, dass in meiner app, was darauf hindeutet, die DB speichert automatisch.
Bei der Durchsicht der anderen Fragen habe ich nur Vorschläge gefunden, dass CoreData eine bessere Idee ist. Allerdings, wenn ich auf dem richtigen Weg bin, brauche ich nur diese drei Zeilen zu arbeiten, und ich bin fertig (mit diesem Teil).
Außerdem weiß ich, dass nichts mit den bool-Variablen gemacht wird, außer sie auf der Konsole auszugeben. Das ist meine nächste Herausforderung.
Vielen Dank für Ihre Zeit!