如何获得发送到数据库的精确SQL语句

如何获得发送到数据库的精确SQL语句,sql,c,sqlite,Sql,C,Sqlite,我想打印出发送到数据库的确切SQL语句,用于日志记录。我看过sqlite3_sql,但它实际上并没有打印sql语句,只是我用作sqlite3_prepare_v2输入的原始sql 这是我的函数,它向一行添加一个值,我还想打印sql语句 int add_value(sqlite3* db, sqlite3_stmt * stmt, const char* oid, const char* value) { char sql[256] = {0}; sprintf(sql, "UPD

我想打印出发送到数据库的确切SQL语句,用于日志记录。我看过sqlite3_sql,但它实际上并没有打印sql语句,只是我用作sqlite3_prepare_v2输入的原始sql

这是我的函数,它向一行添加一个值,我还想打印sql语句

int add_value(sqlite3* db, sqlite3_stmt * stmt, const char* oid, const char* value)
{
    char sql[256] = {0};
    sprintf(sql, "UPDATE table1 SET Value=? WHERE Field1=\"%s\"", oid);
    printf("%s\n", sql);

    int ret = ::sqlite3_prepare_v2(
        db,
        sql,
        strlen(sql),
        &stmt,
        0 );

    /* How do I print out the sql statement to be sent to the database? */

    ret = ::sqlite3_bind_text( stmt, 1, value, strlen(value), 0 );
    ret = sqlite3_step(stmt);

    return ret;
}

作为一点背景知识,我将向数据库中插入整数和字符串。那么使用什么呢?其目的是简化字符串的处理——即是否在值周围加引号取决于数据类型。但出于调试目的,我确实希望记录sql语句。

原始sql语句和绑定参数值都会发送到数据库

没有读取参数值的机制。 调用
sqlite3\u bind.*
时必须记录这些值