【问题标题】:FMDB Result set contains null iphoneFMDB 结果集包含空 iphone
【发布时间】:2011-03-06 15:07:57
【问题描述】:

我正在为我的应用程序使用 FMDB 在 sqlite 中存储数据。这是我的代码

来自 AppDelegate

- (void)applicationDidFinishLaunching:(UIApplication *)application 

{

FMDatabase* db = [FMDatabase databaseWithPath:@"/tmp/sql.sqlite"];

if (![db open]) {
    NSLog(@"Could not open db.");

}
NSLog(@"DB opened successfully");

//此处未显示完整代码

}

我在 ViewController 中有以下代码

-(IBAction)insertButtonClicked:(id)sender

{ NSLog(@"in insertButtonCLicked");

[db beginTransaction];

[db executeUpdate:@"insert into sample (url) values (?)",@"google'"];

[db commit];

}

-(IBAction)displayButtonClicked:(id)sender

{

NSLog(@"in DisplayCLicked");

FMResultSet *rs = [db executeQuery:@"select url from sample"];

NSLog(@"Rs contains => %@",rs);

while( [rs next])
{

    NSLog(@"%@",[rs stringForColumn:@"url"]);
}
[rs close];

}

当我运行此代码时,我将 rs 设为 null,如下所示(这是来自控制台的 o/p)

2011-03-07 07:30:06.919 InsertDataSample[3092:20b] DB opened successfully

2011-03-07 07:30:13.341 InsertDataSample[3092:20b] 在 insertButtonCLicked

2011-03-07 07:30:16.860 InsertDataSample[3092:20b] 在 DisplayCLicked 中

2011-03-07 07:30:16.860 InsertDataSample[3092:20b] Rs 包含 => (null)

请帮助我的朋友。我在 FMDB 上工作了很多天,但我无法使用 FMDB。 提前致谢

【问题讨论】:

    标签: iphone sqlite fmdb


    【解决方案1】:

    在您的查询之后插入此内容,FMDB 可能会准确地告诉您问题所在。

    if ([db hadError]) {
        NSLog(@"DB Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
    }
    

    更新:

    运行这个:

    FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/sql.sqlite"];
    [db executeUpdate:@"create table sample (url TEXT);"];
    [db executeUpdate:@"insert into sample (url) values(?);", @"google'"];
    FMResultSet *rs = [db executeQuery:@"select url from sample;"];
    while ([rs next]) {
        NSLog(@"%@", [rs stringForColumn:@"url"]);
    }
    [rs close];
    [db close];
    

    产生了这个输出:

    2011-03-06 12:38:59.831 test[93163:207] google'
    

    【讨论】:

    • 感谢回复。但仍然存在同样的问题,即结果集包含 NULL 。是否有必要在 FMDB 中以编程方式创建表?因为我使用终端创建了 sample.sqlite 并且只编写了创建查询并将该文件与 libsqlite3.0.dylib 一起添加到我的资源中。
    • 但是添加新代码后,日志输出是否显示 DB 错误?是的,在尝试插入行之前有必要创建“样本”表。 (也可以在executeUpdate之后添加错误日志输出。)
    • 添加新代码后也没有错误。我在 viewDidLoad 方法中创建了表。还是同样的问题,记录集为空
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2012-03-13
    • 2023-04-04
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多