ios - 在 sqlite 中设置 user_version

标签 ios sqlite fmdb

我在这里看到了关于读取 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]];
}

results 是一个格式很好的字典:

(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 我认为您可以接受我的回答,因为它可能对搜索“如何设置 user_version PRAGMA”的访问者更有用,并且它还可以通过更简洁的解决方案解决您的问题。

关于ios - 在 sqlite 中设置 user_version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178681/

相关文章:

ios - 如何将自定义扩展名的文件添加到 XCode 中的 bundle/resource 文件夹?

javascript - Titanium - JavaScript - SQLite 表未找到?

ios - FM 数据库结果集

ios - 隐式转换丢失整数精度 : 'unsigned long' to 'int' (causes app to crash)

ios - Xcode 8 beta 2 安装报错

ios - 推送 View Controller 时,UISearchController searchBar 不会消失

sqlite - ASP.NET Identity + Entity Framework + SQLite 分享

SQLite3 FTS3/FTS4 匹配信息示例

ios - 如果 id 不在数组中,如何删除(FMDB sqlite Swift iOS)?

swift - 无法访问 fts4 虚拟表 - SQLite 数据库错误 : 1 "no such table:"