Функция, указанная ниже, должна проверять, существует ли конкретная запись в таблице. Если запись существует, она возвращает 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
Необходимо проверить возвращаемое значение 'sqlite3_prepare_v2'. (Но это не проблема, которую вы ищете.) –
Очевидным ответом является то, что строка с этими значениями действительно не существует. –
@CL. Я проверил его заранее. Столбцы, созданные для stmt, равны 1, а тип, показанный при оценке с помощью sqlite3_column_type(), равен 1 (целочисленный флаг). Кроме того, показанные записи были в базе данных таблицы. – Steve