我正在使用来自C++应用程序的SQLite(3.6.4)(使用标准的C api).我的问题是:一旦查询已经准备好,使用sqlite3_prepare_v2()和绑定参数使用sqlite3_bind_xyz()- 是否有任何方法可以获得包含原始SQL查询的字符串?
原因是当出现问题时,我想打印查询(用于调试 - 这是一个内部开发人员只有测试应用程序).
例:
sqlite3_prepare_v2(db, "SELECT * FROM xyz WHERE something = ? AND somethingelse = ?", -1, &myQuery, NULL);
sqlite3_bind_text(myQuery, 1, mySomething);
sqlite3_bind_text(myQuery, 2, mySomethingElse);
// ....
// somewhere else, in another function perhaps
if (sqlite3_step(myQuery) != SQLITE_OK)
{
// Here i'd like to print the actual query that failed - but I
// only have the myQuery variable
exit(-1);
}
Run Code Online (Sandbox Code Playgroud)
奖励点如果它还可以打印出绑定的实际参数.:)
根据 sqlite3.c(合并)中的注释,sqlite3_sql(myQuery)将返回原始 SQL 文本。
我没有看到任何用于查找特定索引处绑定值的函数,但我们可以轻松地将一个函数添加到标准 SQLite 函数集中。它可能看起来像这样:
const char* sqlite3_bound_value(sqlite3_stmt* pStmt, int index)
{
Vdbe *p = (Vdbe *)pStmt;
// check if &p->aVar[index - 1] points to a valid location.
return (char*)sqlite3ValueText(&p->aVar[index - 1], SQLITE_UTF8);
}
Run Code Online (Sandbox Code Playgroud)
好吧,上面的代码仅显示了 sqlite3_bound_value() 的一种可能的实现方式。我还没有测试过它,它可能是错误的,但它给出了有关如何/从哪里开始的某些提示。
| 归档时间: |
|
| 查看次数: |
7664 次 |
| 最近记录: |