10

我正在做的一个 sqlite 项目有问题,我正在使用 FMDB,我遵循了一个简单的示例,但不起作用。而且我找不到错误。我从终端做了我的数据库模式,我在上面放了一些数据。我对 ios dev 很陌生,所以我不知道我是否正确地执行了这些步骤。这就是我所做的:

1 - 我制作了我的数据库模式并添加了一些字段。2 - 我将 database.db 复制到 xcode 中的项目文件夹中。3 - 我添加了 FMDB 文件。4 - 我添加 sqlite3.dylib 5 - 我把这段代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.dbname = @"database.db";
    NSArray * docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * docDIr = [docPath objectAtIndex:0];
    self.dbpath = [docDIr stringByAppendingPathComponent:dbname];

    [self checkDB];

    [self getQ];

    return YES;
}
-(void) getQ
{
    FMDatabase * db = [FMDatabase databaseWithPath:dbpath];
    [db open];

    FMResultSet * result = [db executeQuery:@"SELECT * FROM table1"];

    NSLog(@"last Error: %@",[db lastErrorMessage]);
    NSLog(@"result: %@", result);
}
-(void) checkDB
{
    BOOL success;
    NSFileManager * fm = [NSFileManager defaultManager];
    success = [fm fileExistsAtPath:dbpath];
    NSError * error = [[NSError alloc] init];
    if (success) return;
    NSLog(@"result:");
    NSString * dbPathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:self.dbname];

    [fm copyItemAtPath:dbPathFromApp toPath:dbpath error:&error];           
}

显然数据库是空的,所以发生了什么?为什么我找不到 table1 ?如果我用任何 sqlite gui 打开文件,表格看起来就好了。感谢您的帮助控制台向我显示下一行:2013-03-02 14:03:31.839 myApp[21433:c07] 最后错误:没有这样的表:table1 2013-03-02 14:03:31.841 myApp[21433: c07] 结果:(空)

4

2 回答 2

24

几个想法:

  1. 我会确认数据库已添加到您的捆绑包中。转到您的目标设置,选择“Build Phases”,展开“Copy Bundle Resources”,并确保您的数据库在此处列出。如果没有,请单击“+”按钮并添加它。

    捆

  2. 我会重置你的模拟器。如果您曾经运行过该应用程序并且没有正确复制数据库,它会在您的文档文件夹中为您创建一个空白数据库。通过重置您的模拟器,您可以摆脱可能存在的任何空白数据库。

  3. 如果它仍然无法正常工作,我会在您的模拟器中检查捆绑数据库。导航到模拟器文件夹(~/Library/Application Support/iPhone Simulator),找到应用程序,打开包(通过控制单击应用程序本身并说“显示包内容”),然后检查那里的数据库并制作确定它有你的table1.

于 2013-03-02T17:20:36.110 回答
-1

添加数据库文件后,请选择该文件并勾选标记目标成员。

检查附件

于 2021-03-08T10:35:51.430 回答