Отладка SQLite-запроса из программы на C - PullRequest
0 голосов
/ 10 октября 2011

У меня есть таблица SQL, в которой один из столбцов имеет несколько значений, разделенных запятыми. Предполагается, что приведенный ниже код пройдет через все из них и вернет true, если в списке присутствует конкретное значение, однако, похоже, он работает только со значениями, отличными от первого значения в записи. Есть идеи о том, где я облажался? Запрос работает нормально при запуске его непосредственно в файле базы данных с использованием sqlite3, поэтому я уверен, что проблема в этой функции.

bool group_exists(char *group)
{
    int retv;
    char *param_1, *param_2;
    bool exists = false;
    sqlite3_stmt *p_stmn;

    param_1 = malloc(BUFFER_SIZE);
    param_2 = malloc(BUFFER_SIZE);

    sprintf(param_1, "%s,%%", group);
    sprintf(param_2, "%%,%s,%%", group);

    sqlite3_prepare_v2(db, "SELECT groups FROM users WHERE groups LIKE ? OR groups LIKE ?", -1, &p_stmn, NULL);
    sqlite3_bind_text(p_stmn, 1, param_1, -1, NULL);
    sqlite3_bind_text(p_stmn, 1, param_2, -1, NULL);
    retv = sqlite3_step(p_stmn);

    if (retv == SQLITE_ROW) {
        exists = true;
    } else if (retv != SQLITE_DONE) {
        retval_crash();
    }

    free(param_1);
    free(param_2);
    sqlite3_finalize(p_stmn);

    return exists;
}

1 Ответ

0 голосов
/ 10 октября 2011

Убедитесь, что вы привязали индексы к правильному параметру sql.

sqlite3_bind_text(p_stmn, 1, param_1, -1, NULL);
sqlite3_bind_text(p_stmn, 2, param_2, -1, NULL);

Также при попытке отладки sqlite обязательно проверьте коды результата , чтобы убедиться, что все прошло успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...