gpt4 book ai didi

Ios DBAccess 查询调试

转载 作者:行者123 更新时间:2023-11-29 12:00:26 25 4
gpt4 key购买 nike

我正在尝试使用委托(delegate)函数调试查询

<pre>
- (void)queryPerformedWithProfile:(DBQueryProfile*)profile
{
NSLog(@"QUERY: %@", profile.compiledQuery);
NSLog(@"RESULTS: %i", profile.rows);
}
</pre>

但日志显示:

<pre>
2016-05-17 10:04:08.426 AppName[19301:410138] QUERY: (null)
2016-05-17 10:04:08.426 AppName[19301:410138] RESULTS: 0
</pre>

CompiledQuery 和行似乎没有初始化。我需要启用调试吗?我正在使用 AppDelegate 作为委托(delegate)。

我需要调试查询,因为包含 LIKE 子句的查询有问题:

DBResultset* result = [[[User query] whereWithFormat:@"type=%@ AND (name LIKE '%@%' OR surname LIKE '%@%')", @(kindId), strFilter, strFilter] fetch];

也许我的查询有问题。

最佳答案

有趣的是,如果出现错误,那可能是分析器中的错误,我们将对其进行测试并尽快修复。

但是你想实现这个方法:

- (void)databaseError:(DBError *)error {
if (error) {
NSLog(@"%@",error.errorMessage);
}
}

查找任何类型的语法错误。此外,您可以只注销配置文件以输出格式化的查询分析,如下所示:

- (void)queryPerformedWithProfile:(DBQueryProfile *)profile {
if (profile.queryTime > 1000) {
NSLog(@"%@",profile);
}
}

输出如下:

DB Query Profiler
------------------------------------------------------------------------------------------
Query Time:1212 ms Lock Wait:0 ms Parse Time:0 ms Seek Time:1211 ms Row Count:1
------------------------------------------------------------------------------------------
SQL Query
------------------------------------------------------------------------------------------
SELECT DataForm.Id as result$Id, DataForm.completedDateTimeUTC as result$completedDateTimeUTC, DataForm.contentSetId as result$contentSetId, DataForm.submitted as result$submitted, DataForm.loginId as result$loginId, DataForm.resourceId as result$resourceId, DataForm.formData as result$formData, DataForm.submitGuid as result$submitGuid FROM DataForm WHERE submitGuid = ? LIMIT 1
------------------------------------------------------------------------------------------
SQLITE3 QUERY PLAN
------------------------------------------------------------------------------------------
Order:0 From:0 Usage: SCAN TABLE DataForm
------------------------------------------------------------------------------------------

现在:为了帮助使用 LIKE 命令,您最好使用 dbMakeLike(string) 函数。像这样使用。

whereWithFormat:@"lower(text) LIKE %@“, dbMakeLike(searchString.lowercaseString)

通过这种方式,LIKE 条件作为对象传入,我们可以将其视为正确分隔的参数,而无需您猜测我们如何在内部重新排列查询。

关于Ios DBAccess 查询调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com