2015-09-30 94 views
0

我想打印出發送到數據庫的確切SQL語句以進行日誌記錄。我查看了sqlite3_sql,但它實際上並沒有打印出SQL語句,只是我用作sqlite3_prepare_v2的輸入的原始SQL。如何獲取發送到數據庫的確切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語句。

回答

0

原始SQL語句和綁定參數值都發送到數據庫。

沒有讀出參數值的機制。 您必須在致電sqlite3_bind_*時記錄這些值。

相關問題