我的目标是将一个列插入一个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
。我遇到的问题是,当我运行一个insert语句时,代码没有到达回调函数。
如果使用sqlite3_exec运行insert命令,是否应该调用回调方法?
我应该使用不同的sqlite命令吗?
谢谢!
答案 0 :(得分:2)
如果语句返回一些数据,则会调用sqlite3_exec
回调。
这种情况只能发生在SELECT
和一些PRAGMA
语句中。
要获取插入记录的rowid,请调用sqlite3_last_insert_rowid。