gpt4 book ai didi

ios - 我想知道如何测试sqlite中的compileStatement是否返回答案,而不错过第一行

转载 作者:行者123 更新时间:2023-12-02 05:08:01 32 4
gpt4 key购买 nike

我想测试SQL是否返回结果。如果没有结果,我想发消息。问题是,当我进行该测试时,当我想要执行我的过程时(找到行时),第一行会被跳过。

NSString *selectSQL = [NSString stringWithFormat:@"SELECT z_pk, zpostcode, zname, zfirstname, zstreetname, zstreetnumber, zcity FROM ZTAB_PARTICULIER where UPPER(ZNAME) like \'\%%%@%%\' and ZPOSTCODE like \'\%%%@%%\'", [self.name.text  uppercaseString], self.postcode.text];

const char *query_stmt = [selectSQL UTF8String];

sqlite3_stmt *compiledStatement;


//Compilation de la requete et verification du succes
if (sqlite3_prepare_v2(database, query_stmt, -1, &compiledStatement, NULL) == SQLITE_OK)
{
NSLog(@"Prepare Database OK");

int stat = sqlite3_step(compiledStatement);
if (stat == SQLITE_DONE)
{
NSLog(@"NO ROWS!");
}
while (sqlite3_step(compiledStatement) == SQLITE_ROW)
{
...

提前致谢

最佳答案

删除对 sqlite3_step 的第一次调用。只需在 while 循环中增加一个计数器,并在 while 循环之后,查看该计数器是否为零。

例如,您可能会这样做:

if (sqlite3_prepare_v2(database, query_stmt, -1, &compiledStatement, NULL) == SQLITE_OK) {
NSLog(@"Prepare Database OK");

// int stat = sqlite3_step(compiledStatement);
// if (stat == SQLITE_DONE)
// {
// NSLog(@"NO ROWS!");
// }

NSInteger rows = 0;
int rc;

while ((rc = sqlite3_step(compiledStatement)) == SQLITE_ROW) {
rows++;

...
}

if (rc != SQLITE_DONE) {
NSLog(@"Some error %s (%ld)", sqlite3_errmsg(), (long)rc);
}

if (rows == 0) {
NSLog(@"NO ROWS!");
}

...

类似的东西不仅检查“无行”情况,还检查错误。

关于ios - 我想知道如何测试sqlite中的compileStatement是否返回答案,而不错过第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403421/

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