2013-11-22 30 views
1

我的目標是將一列插入到SQLite表中,然後返回條目以便我可以獲得主鍵值。我有以下的代碼,對我來說,執行普通插入語句:SQLite3_exec回調沒有用C++中的INSERT語句調用

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命令?

謝謝!如果語句返回一些數據

回答

2

sqlite3_exec回調函數被調用。 這可能只發生在SELECT和一些PRAGMA陳述中。

爲了得到插入記錄的ROWID,叫sqlite3_last_insert_rowid