2016-04-07 3 views
1

Функция, указанная ниже, должна проверять, существует ли конкретная запись в таблице. Если запись существует, она возвращает 1. Если это не так, оно возвращает 0. Однако оно возвращает только 0.Результат, возвращаемый из SQL-запроса, всегда 0

Используемая таблица: Database(ID int Primary Key, char(100) Place, char(100) Room), все не являются NULL. Все запросы, показанные ниже, приведены в базе данных.

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

Результат:

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

Необходимо проверить возвращаемое значение 'sqlite3_prepare_v2'. (Но это не проблема, которую вы ищете.) –

+0

Очевидным ответом является то, что строка с этими значениями действительно не существует. –

+0

@CL. Я проверил его заранее. Столбцы, созданные для stmt, равны 1, а тип, показанный при оценке с помощью sqlite3_column_type(), равен 1 (целочисленный флаг). Кроме того, показанные записи были в базе данных таблицы. – Steve

ответ

0

Я не знаю, почему и как, но кажется, что перезагрузка моего компьютера фактически решила проблему. Функция теперь работает отлично. Извините за то, что тратишь время всех.

0
 "Select EXISTS(Select * From Database " 

EXISTS запрос возвращает либо 0 (если нет такой строки (ы) не существует) или 1 (когда они делают). Он вернул 0, поэтому таких строк не существовало.

+1

Он говорит, что строки существуют. – Barmar

+0

@Barmar хорошо, то либо a) они на самом деле этого не делают, либо б) что-то другое заставляет запрос думать, что они этого не делают. Возврат 0 в этом случае означает, что таких строк не существует – Magisch

Смежные вопросы