在sqlite中设置user_version

我在这里看到关于阅读user_version的其他问题,这似乎对我工作正常。 但是我想在FMDB中使用sqlite来设置我的版本号,它不是设置。

_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) 

我想知道: 为什么用户的版本号不适合我?

如果您需要设置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我认为你可以接受我的答案,因为它可能更有用的访问者search“如何设置user_version PRAGMA”,它也解决了你的问题与整洁的解决scheme。

当我想出这个问题的时候,我正准备发一个赏金。 而且经常发生,我只是一个笨蛋

我正在做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相同的类别中。