2016-04-07 12 views
1

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 
+0

Sie müssen den Rückgabewert von 'sqlite3_prepare_v2' überprüfen. (Aber das ist nicht das Problem, das Sie suchen.) –

+0

Die offensichtliche Antwort ist, dass eine Zeile mit diesen Werten tatsächlich nicht existiert. –

+0

@ 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

Antwort

0

Ich weiß nicht warum oder wie, aber es scheint, dass Neustart meines Computers tatsächlich das Problem gelöst hat. Die Funktion funktioniert jetzt einwandfrei. Entschuldigung, dass wir alle Zeit verschwenden.

0
 "Select EXISTS(Select * From Database " 

EXISTIERT Die Abfrage gibt entweder 0 (wenn keine solche Zeile (n) vorhanden ist) oder 1 (wenn sie es tun). Es gab 0 zurück, also gab es keine solchen Zeilen.

+1

Er sagt, dass die Zeilen existieren. – Barmar

+0

@Barmar gut, dann entweder a) sie tatsächlich nicht, oder b) etwas anderes macht die Abfrage denken, dass sie es nicht tun. Die Rückgabe von 0 bedeutet in diesem Fall, dass keine solchen Zeilen existieren – Magisch