0

我正在使用教程在我的项目中实现 FMDB。但是我的代码没有返回任何值。这是检索值的代码。

-(NSMutableArray *) getCustomers
{
    NSMutableArray *customers = [[NSMutableArray alloc] init];
    FMDatabase *db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
    [db open];
    FMResultSet *results = [db executeQuery:@"SELECT * FROM customers"];
    NSLog(@"results %i,%@,%@",[results intForColumn:@"id"],[results stringForColumn:@"firstname"],[results stringForColumn:@"lastname"]);
    while([results next]) 
    {
        Customer *customer = [[Customer alloc] init];
        customer.customerId = [results intForColumn:@"id"];
        customer.firstName = [results stringForColumn:@"firstname"];
        customer.lastName = [results stringForColumn:@"lastname"];
        [customers addObject:customer];
    }
    [db close];
    return customers; 
}

当我在文档目录中检查 db 而不是 db 时,这里是日志

CRUD[47363:f803] db /Users/pingdanehog/Library/Application Support/iPhone Simulator/5.1/Applications/D9F19E7D-A232-4C4A-8218-58BC136053A7/Documents/Customers.db

这是我的数据库 在此处输入图像描述

它包含数据

在此处输入图像描述

但是我的结果值始终为空,请帮助之前运行过此代码,但是当我为该项目创建具有相同名称的新数据库时,它已经停止了。

这是结果的值。

results 0,(null),(null)

我已经在 appdelegate 文件中初始化了我的数据库

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    databaseName = @"Customers.db";

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [documentPaths objectAtIndex:0];
    databasePath = [documentDir stringByAppendingPathComponent:databaseName];

    [self createAndCheckDatabase];


    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

-(void) createAndCheckDatabase
{
    BOOL success;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];

    if(success) return;

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
4

2 回答 2

1

会发生什么,如果你把线

NSLog(@"结果 %i,%@,%@",[结果 intForColumn:@"id"], ....

在 [results next] 之后,例如在 while 循环内?

FMDB 的文档说:“在尝试访问查询中返回的值之前,您必须始终调用 -[FMResultSet next],即使您只期待一个”

于 2013-04-08T21:39:52.987 回答
0

确保您已将您的数据库初始化为 AppDelegate 或您使用 FMDB 的任何文件。

如果是并且您已在某处对其进行了初始化,则尝试运行此 SQL "SELECT * FROM customers" 。在数据库本身,在 SQL 选项卡中。并检查数据库是否包含这些值。

Before that make sure you are running SQL in databse which resides into **Application Support**

享受编程!

于 2013-04-04T13:02:12.597 回答