c - 从 C 程序调试 SQLite 查询

标签 c sqlite

我有一个 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;
}

最佳答案

确保将索引绑定(bind)到正确的 sql 参数。

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

此外,当尝试调试 sqlite 时,请务必检查 result codes以确保一切顺利。

关于c - 从 C 程序调试 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717508/

相关文章:

c# - SQLite : how? 中的 SHA1 哈希

database - 为什么我的 Django 批量数据库填充如此缓慢且经常失败?

PHP POST 数据不显示

c - ANSI C 多平台编译器和 GUI

c - 在 GTK+2 中单击按钮后重新定义标签

c - 负数的位表示

sqlite - 如何在 SQLite 中将时间戳转换为字符串?

c - 如何安全地排出标准输入?

c - 不寻常的函数指针参数语法

python sqlite3 从 excel 创建数据库