gpt4 book ai didi

iphone - iOS - FMDB 数据库插入

转载 作者:行者123 更新时间:2023-12-03 19:39:01 26 4
gpt4 key购买 nike

要使用 sqlite 将数据插入数据库,需要复制数据库以使其可写。所以我在我的类(class)中有这个方法,我在堆栈溢出和许多其他网站上看到的每一个建议:

-(void)createEditableCopyOfDatabaseIfNeeded 
{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"];

success = [fileManager fileExistsAtPath:writableDBPath];

if (success) return;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}

}

当然,我有以下代码来访问我的数据库:

FMDatabase *db; = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"db"]];
if (![db open]) {
NSLog(@"Error!");
}
else {
NSLog(@"Database opened!!");
}

[self createEditableCopyOfDatabaseIfNeeded];
[db executeUpdate:@"Insert into user (name, phone, comment) values(?, ?, ?)", @"Name1", @"13548", @"This is a comment", nil];
NSLog(@"Inserted");

FMResultSet *s = [db executeQuery:@"SELECT * FROM user"];
while ([s next]) {
NSLog(@"%@", [s stringForColumn:@"comment"]);
}

现在我有几个问题:

  1. 插入代码在执行/运行时在模拟器中完美运行。然而,这对真实的sample.db 没有影响,我得出的结论是它必须在我的Mac 硬盘驱动器中的某个位置有一个可写副本。这是可以接受的。但是当我在 iPhone 上运行这些代码时,它有点无法识别我的 createEditableCopyOfDatabaseIfNeeded 方法并给出此错误:未知错误完成或重置语句>(8:尝试写入只读数据库)。如何使用 FMDB 使这些代码工作?

  2. 在iPhone上运行时,复制的数据库将位于哪里?复制后,即使未连接到我的 Mac,iPhone 也会再次使用该数据库吗?

在设备上运行时我无法插入某些内容。请帮忙。

非常感谢!

最佳答案

如果您正在阅读本文,那么我就可以解释您的问题。

  1. 如果资源包中有任何文件,则它是只读文件。因此,您的资源目录的数据库路径仅供阅读之用。

  2. 根据您编写的复制数据库的代码,数据库将在您的应用程序的文档目录中创建。即使您从 Mac 上移除 iPhone,此路径也不会受到影响。

关于iphone - iOS - FMDB 数据库插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com