2010-04-17 28 views
10

我想檢查sqlite數據庫的user_version。我有一個管理工具來衝擊版本,但我不明白編譯指示語句的語法。我期待在if語句中測試這個值。有人可以提供代碼示例嗎?當我在我的objective-c代碼中嵌入pragma語句時,編譯器會引發錯誤。如何在Objective-c中使用sqlite3 PRAGMA user_version?

+0

我更新我的例子回答。 – newtover 2010-04-21 08:06:45

回答

22

我從newtover的靈感中發現了它,挖掘了FMDB並重新閱讀了文檔(在我看來,它仍然非常模糊)。當我對需要遷移的模式進行重要更改時,此代碼返回我在管理工具中遇到的值。

-(int)queryUserVersion: (sqlite3*) db { 
    // get current database version of schema 
    static sqlite3_stmt *stmt_version; 
    int databaseVersion; 

    if(sqlite3_prepare_v2(db, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK) { 
     while(sqlite3_step(stmt_version) == SQLITE_ROW) { 
      databaseVersion = sqlite3_column_int(stmt_version, 0); 
      NSLog(@"%s: version %d", __FUNCTION__, databaseVersion); 
     } 
     NSLog(@"%s: the databaseVersion is: %d", __FUNCTION__, databaseVersion); 
    } else { 
     NSLog(@"%s: ERROR Preparing: , %s", __FUNCTION__, sqlite3_errmsg(db)); 
    } 
    sqlite3_finalize(stmt_version); 

    return databaseVersion; 
} 

我有其中的SQL語句。如果您正在使用FMDB包裝(這是建議,如果你不想處理的C處理改爲"PRAGMA schema_version;"

+1

觸摸schema_version不是一個好主意:http://www.sqlite.org/pragma.html#pragma_user_version – 2013-05-09 00:43:40

+0

@AntonChikin觸摸,你的意思是「只讀」?我認爲有一個版本的目的是讀取和測試這個值。我不打算修改它。爲什麼我不應該觸摸它。 – mobibob 2013-05-09 17:50:47

+0

@mobibob Anton鏈接的sqlite網站有你的問題的答案,檢查出schema_version部分,第二段:http://www.sqlite.org/pragma.html#pragma_schema_version – davidfg4 2013-05-20 16:25:34

4

Pragma語句can not將用於其他語句中(其他語句中沒有對pragma-stmt的引用)。

但是,您可以通過發出兩個請求來使用user_version值:查詢雜注並在下一個查詢中將所選值用作文字。

UPD:如果你有興趣PRAGMA語法,這是相當簡單:

sqlite> pragma user_version=10; 
sqlite> pragma user_version; 
user_version 
------------------------------ 
10 
sqlite> pragma user_version='12.3.124'; 
sqlite> pragma user_version; 
user_version 
------------------------------ 
12 

這就是結果會與單個值的行。

如果您對在objective-c中向SQLite發佈語句的方式感興趣,請嘗試查看neighbour questionsexample。不幸的是,我從來沒有用Objective-C編碼過。

+0

好的,我到目前爲止和你在一起。但是,幫助我進一步,你是否說我做了這樣的事情:sqlite3_prepare_v2(PRAGMA user_version); char * ver = sqlite_column_text(1);你能否提供一些代碼 - 我不明白該文檔。 – mobibob 2010-04-21 01:55:14