2016-04-07 22 views
1

Aşağıdaki işlev, tabloda belirli bir giriş olup olmadığını kontrol etmelidir. Giriş varsa, bir 1 döndürür. Olmazsa, 0 döndürür. Ancak, yalnızca 0 olan birSQL sorgusundan döndürülen sonuç her zaman 0

Tablo kullanılır: Database(ID int Primary Key, char(100) Place, char(100) Room), tümü NULL değil. Aşağıdaki sonuçlarda gösterilen tüm sorgular Veritabanındadır.

//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; 
} 

Sonuç: (bunu yaptıklarında)

place1, venue1 evals to 0 
place2, venue2 evals to 0 
place3, venue3 evals to 0 
+0

'sqlite3_prepare_v2'ün dönüş değerini kontrol etmelisiniz. (Ama bu aradığınız sorun değil.) –

+0

Açık cevap, bu değerlere sahip bir satırın mevcut olmamasıdır. –

+0

@CL. Önceden kontrol ettim. Stmt için üretilen sütunlar 1'dir ve sqlite3_column_type() ile değerlendirildiğinde gösterilen tür 1'dir (tamsayı bayrağı). Ayrıca, gösterilen girişler Veritabanı tablosundaydı. – Steve

cevap

0

Nedenini veya nasıl olduğunu bilmiyorum, ancak bilgisayarımı yeniden başlatmanın gerçekten sorunu çözdüğü anlaşılıyor. Fonksiyon şimdi mükemmel çalışıyor. Herkesin zamanını boşa harcadığım için üzgünüm.

0
 "Select EXISTS(Select * From Database " 

Query ya 0 (böyle bir satır (ler) olarak ortaya çıkar) ya da 1 döndürür MEVCUT. 0 döndü, bu yüzden böyle bir satır mevcut değildi.

+1

Satırların var olduğunu söylüyor. – Barmar

+0

@Barmar kuyu, ya a) aslında yapmazlar, ya da b) başka bir şey sorguyu yapmadıklarını düşünür. Bu durumda 0'ın geri dönüşü, böyle bir satırın mevcut olmadığı anlamına gelir. – Magisch

İlgili konular