2014-04-30 35 views
1

我正在嘗試使用SQLite數據庫的user_version功能。我無法真正設置user_version,我不知道爲什麼。我已經嘗試過執行查詢來更新user_version的各種方法,並且已經在網上進行了大量搜索,現在處於完全失敗狀態。無法在SQLite中設置user_version

這是我的查詢字符串。

const std::string kSetUserVersion = "PRAGMA user_version = 1;"; 

而這裏就是我想設置user_version,但我的結果仍然是0。

// Set the user version and check it is correct. 
sqlite3_exec(dbConnection->db_handle, kSetUserVersion.c_str(), nullptr, nullptr, &db_err); // <-- this is not working! 
long currentVersion = sqlite3_exec(dbConnection->db_handle, kGetUserVersion.c_str(), nullptr, nullptr, &db_err); 

// If the PRAGMA statement fails, no error returns and it fails silently, so having to add check to see if it has worked. 
if (currentVersion != 1) // Setting the user_version has failed. 
{ 
    throw DatabaseAccessException(sqlite3_errmsg(dbConnection->db_handle)); 
} 

任何幫助深表感謝。

+0

的['sqlite3_exec'(https://www.sqlite.org/c3ref/exec.html)函數將不會返回查詢的結果,你必須使用一個回調以獲取返回的結果數據。 –

+0

你想設置'user_version'還是要查詢它? – Massa

+0

兩者。在這種情況下,我想要做的就是設置它,但是我現在也在查詢它,看看我是否成功設置了它。我最終需要在別處查詢它,以檢查數據庫的更新是否可用。 – Mark

回答

2

sqlite3_exec()返回值是一個狀態/錯誤代碼,而不是來自您的查詢的值。

要得到查詢結果值,有兩個主要選擇:

  1. 使用sqlite3_prepare_v2()sqlite_step()SQLITE_ROW和訪問與例如數據sqlite3_column_int(),使用sqlite3_finalize()完成準備好的查詢。

  2. 提供一個回調函數作爲sqlite3_exec()的第三個參數來捕獲該值。見例如在此例如:Proper use of callback function of sqlite3 in C++

+0

感謝您的幫助。這現在看起來很明顯!但是,我不熟悉如何使用回調來返回user_version? – Mark

+0

爲了將來的參考,在創建任何表之前或者在對數據庫所做的更改之前設置user_version時,它才起作用。謝謝你的幫助。 – Mark