【问题标题】:Query using FMDB not returning result使用 FMDB 查询不返回结果
【发布时间】:2012-03-23 17:24:27
【问题描述】:

我试图在最初没有设置自动增量并且已经有数百条记录的 SQLite 数据库中获得下一个最高 PK。所以我做了下面的方法,它看起来应该可以工作,但我无法从中得到任何结果。我还有其他几种方法可以从数据库中获取有效的数据,但无法弄清楚我做错了什么,而且我会睁一只眼闭一只眼,所以我想我会寻求帮助。

- (NSInteger)getNextSubjectId {

    DrillDownAppAppDelegate *appDelegate = (DrillDownAppAppDelegate *)[[UIApplication sharedApplication] delegate];

    FMDatabase *database = [FMDatabase databaseWithPath:appDelegate.getDBPath];    
    [database open];

    FMResultSet *rst = [database executeQuery:@"select max(subject_id) + 1 AS SUBJECT_ID from SUBJECT"];

    NSLog(@"PRINT FIRST SUBJECT_ID = %@", [rst stringForColumnIndex:0]);

    NSString *nextSubId = [rst stringForColumnIndex:0];
    [database close];

    NSLog(@"NEW SUBJECT_ID = %@", nextSubId);


    NSInteger myInt = [nextSubId intValue];

    return myInt;

    //    [maxSubjectId release];

}

日志显示:

2012-01-25 22:56:29.398 报价[6992:f803] 打印第一个主题 ID = (null) (gdb)

标题如下所示:

//  Subject.h
//  DrillDownApp

#import <UIKit/UIKit.h>

@interface Subject : NSObject {
    NSInteger subject_id;
    NSString *category_title;
    NSString *title;
    BOOL isDirty;

}

- (id) initWithPrimaryKey:(NSInteger)pk;
- (void) addSubject;
- (NSInteger)getNextSubjectId;

@property (nonatomic, readwrite) BOOL isDirty;
@property (nonatomic, readonly) NSInteger subject_id;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * category_title;

@end

【问题讨论】:

    标签: sqlite fmdb


    【解决方案1】:

    来自 FMDB 文档:

    在尝试访问查询中返回的值之前,您必须始终调用 -[FMResultSet next],即使您只期望一个。

    在调用 stringForColumnIndex 之前,只需在 rst 上调用 next 方法。

    【讨论】:

    • 感谢您的帮助,这解决了它!
    【解决方案2】:

    第一次调用[rst next]

    另外,您确定您的 subject_idstring 而不是 int

    最后,你知道你是否可以使用lastInsertRowID吗?

    我是这样使用的:

    int lastRow = [[self getDatabase]lastInsertRowId];
    

    【讨论】:

    • 非常感谢您,这已解决。我知道这是非常简单的事情。由于初始化问题,我之前将其作为 NSString 使用,但现在已修复,因此无需转换即可直接进入 NSInteger。我现在正在检查如何使用 lastInsertRowId 但我的主键字段最初没有设置为自动增量,并且不确定这是否会起作用。
    • 很高兴你能成功。最简单的疏忽总是会绊倒我们。
    猜你喜欢
    • 2011-09-20
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2019-09-18
    • 2012-05-08
    • 2016-09-30
    • 1970-01-01
    相关资源
    最近更新 更多