调用sqlite3_step()时从sqlite3_stmt获取值

时间:2014-11-17 09:45:53

标签: c++ sqlite

我需要挂钩一个程序的日志记录功能并获取它的日志记录参数,它使用sqlite3_prepare_v2 - > sqlite3_bind_xxx - > sqlite3_step函数。我想知道是否可以从sqlite3_stmt获取参数 sql string

这是我的测试代码:

#include <stdio.h>

#include "sqlite3.h"

int main() {
    sqlite3* db;
    sqlite3_open("test.db", &db);
    sqlite3_exec(db, "CREATE TABLE test_table(name text, age integer, info text)", 0, 0, 0);

    sqlite3_stmt* stmt;
    sqlite3_prepare_v2(db, "INSERT INTO 'test_table' (name, age, info) VALUES (?, ?, ?);", -1, &stmt, 0);

    sqlite3_bind_text(stmt, 1, "aabb", 4, 0); // set name
    // sqlite3_bind_int(stmt, 2, 3423);
    // sqlite3_bind_text(stmt, 3, "ccdd", 4, 0);

    sqlite3_step(stmt);

    char* txt = (char*)sqlite3_column_text(stmt, 0); // try to get the name("aabb") from stmt
    printf("txt: %s\n", txt); // it prints "txt: (null)"

}

我尝试了 sqlite_column_xxxx 函数,它打印出null。所以我尝试使用内部结构来解码stmt,实际上它是Vdbe的指针,但是Vdbe结构因版本而异,旧版本有一个&#34; Parse&#39;指针内,但最新版本没有。所以我放弃了使用内部结构。

从stmt获取params和sql字符串的其他任何方法吗?

1 个答案:

答案 0 :(得分:2)

必须检查所有功能的返回值。 (如果收到错误,请使用sqlite3_errmsg获取有用的消息。)

sqlite3_bind_text的第五个参数不能为零。 有关允许的值,请参阅文档。

SQL字符串可通过sqlite3_sql获得。

无法读取参数值。