我需要挂钩一个程序的日志记录功能并获取它的日志记录参数,它使用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字符串的其他任何方法吗?
答案 0 :(得分:2)
您必须检查所有功能的返回值。 (如果收到错误,请使用sqlite3_errmsg获取有用的消息。)
sqlite3_bind_text的第五个参数不能为零。 有关允许的值,请参阅文档。
SQL字符串可通过sqlite3_sql获得。
无法读取参数值。