2014-01-17 51 views
3

我在這裏看到關於閱讀user_version的其他問題,這似乎對我來說工作得很好。不過,我試圖在FMDB中使用sqlite來設置我的版本號,而不是設置。在sqlite中設置user_version

_db = [self openDatabase]; 
[_db executeUpdate:[StudentController creationString]]; 
[_db executeUpdate:[ReadingController creationString]]; 
[_db executeUpdate:[SessionController creationString]]; 
NSLog(@"User version is %i", userVersion); 
NSString *query = [NSString stringWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; 
[_db executeQuery:query]; 

輸出我得到的是:

2014-01-16 22:16:25.438 MyApp[2810:1c103] User version is 2 
2014-01-16 22:16:25.439 MyApp[2810:1c103] Query is PRAGMA USER_VERSION = 2 
2014-01-16 22:18:09.272 MyApp[2810:1c103] Database copied and created 

和運行應用程序了一下,與數據庫保存和加載後就好了,我重新啓動應用程序,並讀取版本號和我打電話此檢查版本號:

FMResultSet *ps = [_db executeQuery:@"PRAGMA USER_VERSION"]; 

NSDictionary *results = [[NSDictionary alloc] init]; 
while ([ps next]) { 
    results = [NSDictionary dictionaryWithDictionary:[ps resultDictionary]]; 
} 

和結果是一個很好的形成詞典:

(lldb) po results 
$0 = 0x09bf5770 { 
    "user_version" = 0; 
} 
(lldb) 

我想知道:爲什麼用戶版本號不適合我?

回答

7

如果您需要設置PRAGMA user_version使用:

[self.db setUserVersion:yourUserVersion]; // yourUserVersion is of uint32_t type 

讀取當前user_version用戶

[self.db userVersion];     // returned value is of uint32_t type 

FMDB封裝它自2013年以來,這樣你就不必親自處理。

文檔:

http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html

PS:@HalR我想你能接受我的答案,因爲是它可能更有益的遊客搜索「如何設置user_version PRAGMA」,它也有解決您的問題整潔的解決方案。

+0

我使用FMDB 2.7.2,重新啓動應用程序後userVersion回滾。有任何想法嗎? –

2

當我想出問題的時候,我正要發佈賞金。而作爲經常發生,我只是做了笨蛋

我在做executeQuery,我應該做的事情executeUpdate

_db = [self openDatabase]; 
[_db executeUpdate:[StudentController creationString]]; 
[_db executeUpdate:[ReadingController creationString]]; 
[_db executeUpdate:[SessionController creationString]]; 
NSLog(@"User version is %i", userVersion); 
NSString *query = [NSString stringWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; 
[_db executeQuery:query]; 

應改爲:

_db = [self openDatabase]; 
[_db executeUpdate:[StudentController creationString]]; 
[_db executeUpdate:[ReadingController creationString]]; 
[_db executeUpdate:[SessionController creationString]]; 
NSLog(@"User version is %i", userVersion); 
NSString *query = [NSString stringWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; 
[_db executeUpdate:query]; 

執行Pragma不是一個查詢,executeQuery不會對它做任何事情。它與UPDATEINSERTDELETE屬於同一類別。

+1

我想你只是複製/經過同一個塊兩次。那麼,應該採取什麼正確的方式來做到這一點?提前致謝。 – Redwarp