WHERE столбец = значение, работать только со значением INTEGER - PullRequest
0 голосов
/ 13 октября 2019

Я использую sqlite в проекте c ++, но у меня возникает проблема, когда я использую WHERE для столбца со значениями TEXT

Я создал базу данных sqlite:

    CREATE TABLE User( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(24))

Когда я пытаюсьчтобы получить значение столбца со значениями VARCHAR, оно не работает, и возвращает мне STATUS_CODE 101 сразу после sqlite3_step:

int res = 0;
sqlite3_stmt *request;
char *sqlSelection = (char *)"SELECT * FROM User WHERE name='bob' ";
int id = 0;

res = sqlite3_prepare_v2(db, sqlSelection, strlen(sqlSelection), &request, NULL);

if (!res){
while (res == SQLITE_OK || res == SQLITE_ROW){
  res = sqlite3_step(request);
  if (res == SQLITE_OK || res == SQLITE_ROW ){
    id = sqlite3_column_int(request, 0);
    printf("User exist %i \n",id);
  }
}
sqlite3_finalize(request);

Я также пытался с LIKE, но он также не работает

SELECT * FROM User WHERE name LIKE '%bob%'

Но когда я выполняю тот же код, но для значения INTERGER

SELECT * FROM User WHERE id=1

Он работает нормально.

В браузере БД для SQLite все запросы работают нормально.

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Чтобы решить проблему, я искал, что означает код состояния 101.

Вот что они сказали.

(101) SQLITE_DONE

Код результата SQLITE_DONEуказывает на то, что операция завершена. Код результата SQLITE_DONE чаще всего рассматривается как возвращаемое значение из sqlite3_step (), указывающее, что инструкция SQL была выполнена до конца. Но SQLITE_DONE также может быть возвращен другими многошаговыми интерфейсами, такими как sqlite3_backup_step ().

https://sqlite.org/rescode.html

Итак, вы получаете 101, потому что больше нет результата отВЫБЕРИТЕ SQL.

0 голосов
/ 14 октября 2019

Решением было заменить поля VARCHAR на TEXT. SQLite для c ++, кажется, не управляет полями VARCHAR, когда они используются после WHERE

...