我在这里看到了关于阅读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)
我想知道:为什么没有为我设置用户版本号?
答案 0 :(得分:8)
如果您需要设置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”更有用,并且它也解决了你的neater解决方案的问题。
答案 1 :(得分: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
不会对其执行任何操作。它与UPDATE
,INSERT
和DELETE
属于同一类别。