如何使用 FMDB 在 iOS 中查询带有整数参数的 SQlite?
How to query SQlite with integer param in iOS using FMDB?
我正在尝试查询在特定列中具有字符串的行。但是,我无法得到想要的结果。
代码:
[_database open];
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid=%d",notesID];
NSString *notes=[results stringForColumn:@"notes"];
if ([_database hadError]) {
NSLog(@"DB Error %d: %@", [_database lastErrorCode], [_database lastErrorMessage]);
}
[_database close];
我用sqlite浏览器查看了数据。我发送的值是 13,数据存在于 table.
当我使用:notesid=%d
控制台说:(这里 FMResultsSet
是 nil
,notes
是 nil
)
DB Error 1: near "%": syntax error
我也尝试在 = 和 %d
之间给出一个 space
当我使用:notesid='%d'
时控制台说:(这里FMResultsSet
不是nil
,notes
是nil
)
DB Error 25: bind or column index out of range
当我使用时:notesid='?'
控制台显示
DB Error 25: bind or column index out of range
当我使用:notesid=?
应用程序在 FMDatabse.m
文件 obj = va_arg(args, id);
处崩溃
我也试过这个:
[_database executeQuery:[NSString stringWithFormat:@"select * from testNotes where notesid='%d'",notesID]];
根据整数值查询行的正确方法是什么?
executeQuery
期望所有参数都是 Objective-C 对象。但是,notesID
是一个整数,因此不是一个对象。为了解决这个问题,您需要将 notesID
包裹在一个 NSNumber
对象中,如下所示:
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid=?", @(notesID)];
正如Mr.Mage建议的那样,我需要将int值包装在NSNumber中。而且,我需要添加
while([results next]) {
notes = [results stringForColumn:@"notes"];
}
没有这个 while 循环,我无法得到所需的结果。
现在的工作代码将是:
[_database open];
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid= ?",@(notesID)];
NSString *notes;
while([results next]) {
notes = [results stringForColumn:@"notes"];
}
if ([_database hadError]) {
NSLog(@"DB Error %d: %@", [_database lastErrorCode], [_database lastErrorMessage]);
}
[_database close];
我正在尝试查询在特定列中具有字符串的行。但是,我无法得到想要的结果。
代码:
[_database open];
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid=%d",notesID];
NSString *notes=[results stringForColumn:@"notes"];
if ([_database hadError]) {
NSLog(@"DB Error %d: %@", [_database lastErrorCode], [_database lastErrorMessage]);
}
[_database close];
我用sqlite浏览器查看了数据。我发送的值是 13,数据存在于 table.
当我使用:notesid=%d
控制台说:(这里 FMResultsSet
是 nil
,notes
是 nil
)
DB Error 1: near "%": syntax error
我也尝试在 = 和 %d
之间给出一个 space当我使用:notesid='%d'
时控制台说:(这里FMResultsSet
不是nil
,notes
是nil
)
DB Error 25: bind or column index out of range
当我使用时:notesid='?'
控制台显示
DB Error 25: bind or column index out of range
当我使用:notesid=?
应用程序在 FMDatabse.m
文件 obj = va_arg(args, id);
处崩溃
我也试过这个:
[_database executeQuery:[NSString stringWithFormat:@"select * from testNotes where notesid='%d'",notesID]];
根据整数值查询行的正确方法是什么?
executeQuery
期望所有参数都是 Objective-C 对象。但是,notesID
是一个整数,因此不是一个对象。为了解决这个问题,您需要将 notesID
包裹在一个 NSNumber
对象中,如下所示:
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid=?", @(notesID)];
正如Mr.Mage建议的那样,我需要将int值包装在NSNumber中。而且,我需要添加
while([results next]) {
notes = [results stringForColumn:@"notes"];
}
没有这个 while 循环,我无法得到所需的结果。
现在的工作代码将是:
[_database open];
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid= ?",@(notesID)];
NSString *notes;
while([results next]) {
notes = [results stringForColumn:@"notes"];
}
if ([_database hadError]) {
NSLog(@"DB Error %d: %@", [_database lastErrorCode], [_database lastErrorMessage]);
}
[_database close];