我正在尝试查询在特定列中包含字符串的行。但是,我无法得到理想的结果。
代码:
[_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,数据存在于表中。
当我使用:notesid=%d
时,控制台会说:( FMResultsSet
nil
为notes
,nil
为notesid='%d'
)
数据库错误1:接近“%”:语法错误
我也试过在=和%d之间给出一个空格
当我使用:FMResultsSet
时,控制台会说:( nil
notes
不是nil
,notesid='?'
是notesid=?
)
数据库错误25:绑定或列索引超出范围
当我使用:obj = va_arg(args, id);
时,控制台会说
数据库错误25:绑定或列索引超出范围
当我使用:FMDatabse.m
时,应用会在[_database executeQuery:[NSString stringWithFormat:@"select * from testNotes where notesid='%d'",notesID]];
文件中var nodesToVisit = [{id:1, children:[2,3]}]; // 1 is the root
visitNextBatch();
function visitNextBatch() {
var copyOfNodes = nodesToVisit;
nodesToVisit = [];
Promise.each(copyOfNodes, val => {
console.log(val.id);
if(val.children) {
val.children.forEach(child => {
var getChildFromDatabasePromise = myDatabase.get(child);
nodesToVisit.push(getChildFromDatabasePromise);
});
}
}).then(function() {
visitNextBatch();
})
}
崩溃
我也试过这个:
d = {
"modID1":
{
"sequences1": {"header1": 3},
"sequences2": {"header2": 5},
"sequences3": {"header3": 1}
},
"modID2":
{
"sequences1": {"header1": 1},
"sequences2": {"header2": 8},
},
}
result = {
k: OrderedDict(
sorted(
v.items(), # "sequences1": {"header1": 3},"sequences2": {"header2": 5},"sequences3": {"header3": 1}
key=lambda h: next( # h is (sequences1,{"header1": 3})
iter(
h[1].values() # h[1] is {"header1": 3}
)
),
reverse=True
)
) for k, v in d.items()}
print(result)
基于整数值查询行的正确方法是什么?
答案 0 :(得分:2)
executeQuery
期望所有参数都是Objective-C对象。但是,notesID
是一个整数,因此不是对象。为了解决这个问题,您需要将notesID
包裹在NSNumber
这样的对象中:
FMResultSet *results = [_database executeQuery:@"select * from testNotes where notesid=?", @(notesID)];
答案 1 :(得分:0)
正如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];