Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在sqlite中设置用户\u版本_Ios_Sqlite_Fmdb - Fatal编程技术网

Ios 在sqlite中设置用户\u版本

Ios 在sqlite中设置用户\u版本,ios,sqlite,fmdb,Ios,Sqlite,Fmdb,我在这里看到了关于阅读user_版本的其他问题,这对我来说似乎很好。然而,我试图在FMDB中使用sqlite来设置我的版本号,但它没有设置 _db = [self openDatabase]; [_db executeUpdate:[StudentController creationString]]; [_db executeUpdate:[ReadingController creationString]]; [_db executeUpdate:[SessionController cre

我在这里看到了关于阅读user_版本的其他问题,这对我来说似乎很好。然而,我试图在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) 

我想知道:为什么没有为我设置用户版本号?

当我发现问题时,我正要发布悬赏。就像经常发生的那样,我只是个笨蛋

我当时正在做
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
对它没有任何作用。相反,如果需要设置PRAGMA user\u version,则它与
UPDATE
INSERT
DELETE
属于同一类别使用:

[self.db setUserVersion:yourUserVersion]; // yourUserVersion is of uint32_t type
要读取当前用户\u版本用户

[self.db userVersion];                   // returned value is of uint32_t type
FMDB自2013年起就对其进行了封装,因此您无需亲自处理

文件:


PS:@HalR我想你可以接受我的答案,因为它可能对访问者搜索“如何设置用户版本PRAGMA”更有用,而且它还可以用更简洁的解决方案解决你的问题。

我想你只是复制了/通过了同一块两次。那么,正确的方法应该是什么呢?提前感谢。我使用了FMDB 2.7.2,用户版本在重启应用程序后回滚。有什么想法吗?