Die folgende Funktion soll überprüfen, ob ein bestimmter Eintrag in einer Tabelle vorhanden ist oder nicht. Wenn der Eintrag existiert, gibt er eine 1 zurück. Wenn dies nicht der Fall ist, wird eine 0 zurückgegeben. Es wird jedoch nur 0 zurückgegeben.Ergebnis von SQL-Abfrage ist immer 0
Verwendete Tabelle: Database(ID int Primary Key, char(100) Place, char(100) Room)
, alle sind NICHT NULL. Alle Abfragen, die in den Ergebnissen unten angezeigt werden, befinden sich in Datenbank.
//database is already open at this point
int searchForRoom(sqlite3 *db, char *place, char *room){
int result = 1;
sqlite3_stmt *stmt;
//Create SQL statement
char * sql = sqlite3_mprintf(
"Select EXISTS(Select * From Database "
"Where Place = '%q' and Room = '%q');"
, place, room);
sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
if (sqlite3_step(stmt) != SQLITE_ROW) {
printf("ERROR 1 reading data: %s\n", sqlite3_errmsg(db));
}
//only this line of code does not output the correct result
result = sqlite3_column_int(stmt, 0);
if (sqlite3_step(stmt) != SQLITE_DONE) {
printf("ERROR 2 reading data: %s\n", sqlite3_errmsg(db));
}
printf("%s, %s evals to %d\n", place, room, result);
sqlite3_finalize(stmt);
return result;
}
Das Ergebnis:
place1, venue1 evals to 0
place2, venue2 evals to 0
place3, venue3 evals to 0
Sie müssen den Rückgabewert von 'sqlite3_prepare_v2' überprüfen. (Aber das ist nicht das Problem, das Sie suchen.) –
Die offensichtliche Antwort ist, dass eine Zeile mit diesen Werten tatsächlich nicht existiert. –
@ CL. Ich habe es vorher überprüft. Die nach stmt erzeugten Spalten waren 1 und der Typ, der bei der Auswertung mit sqlite3_column_type() angezeigt wurde, war 1 (Ganzzahl-Flag). Die angezeigten Einträge befanden sich ebenfalls in der Tabelle Datenbank. – Steve