【问题标题】:SQLite3_exec callback not called with INSERT statement in c++SQLite3_exec 回调未在 C++ 中使用 INSERT 语句调用
【发布时间】:2013-11-23 17:09:49
【问题描述】:

我的目标是在 SQLite 表中插入一列,然后返回该条目,以便我可以获得主键值。我有以下代码为我执行通用插入语句:

 int SQLiteHelper::ExecuteWriteStatement(Platform::String^ statement)
 {
    char* zErrMsg;
int rc;

LPCWSTR input = statement->Data();
char sql[MAX_PATH + 1];
memset(sql, 0, sizeof(sql));
WideCharToMultiByte(CP_UTF8, 0, input, -1, sql, sizeof(sql), NULL, NULL);

const char* data = "Callback function called";

rc = sqlite3_exec(m_db, sql, WriteCallback, (void*)data, &zErrMsg);

if(rc != SQLITE_OK)
{
    OutputDebugString(L"Failed to Write to database");
    sqlite3_free(zErrMsg);
}
else
{
    OutputDebugString(L"Succesfully wrote to database");
}
 }

我的回调实现如下(注意是静态私有类方法):

int SQLiteHelper::WriteCallback(void *NotUsed, int argc, char** argv, char** azColName)
{
   ////do some stuff
}

我知道我可能会使用void* NotUsed 回调参数来返回数据,并且我很确定它映射到来自 sqlite3_exec() 函数调用的(void*)data。我遇到的问题是,当我运行插入语句时,代码没有到达回调函数。

如果您使用 sqlite3_exec 运行插入命令,它不应该调用回调方法吗?

我应该使用不同的 sqlite 命令吗?

谢谢!

【问题讨论】:

    标签: c++ sqlite


    【解决方案1】:

    如果语句返回一些数据,则调用sqlite3_exec 回调。 这只会发生在SELECT 和一些PRAGMA 语句中。

    要获取插入记录的rowid,请调用sqlite3_last_insert_rowid

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      相关资源
      最近更新 更多