“未知错误”在 iPhone 上的 SQLite 中选择记录总数时
尝试返回 iPhone 上的 SQLite 中是否存在记录,但我不断收到“未知错误”。
selectStmt 是 static sqlite3_stmt *selectStmt = nil;
,这里使用 if(selectStmt) sqlite3_finalize(selectStmt);
,它仅在应用程序终止时执行。此功能适用于删除语句和插入语句,所以我猜下面的逻辑有问题?
- (BOOL) doesBookExist {
if(selectStmt == nil) {
const char *sql = "select count(*) from books where isbn = ?";
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating select statement. '%s'", sqlite3_errmsg(database));
}
//When binding parameters, index starts from 1 and not zero.
int count = sqlite3_bind_text(selectStmt, 1, [isbn UTF8String], -1, SQLITE_TRANSIENT);
if (SQLITE_DONE != sqlite3_step(selectStmt))
NSAssert1(0, @"Error while selecting. '%s'", sqlite3_errmsg(database));
sqlite3_reset(selectStmt);
return (count > 0);
}
Trying to return whether a record exists in SQLite on the iPhone except I keep getting an 'unknown error'.
selectStmt is static sqlite3_stmt *selectStmt = nil;
used here if(selectStmt) sqlite3_finalize(selectStmt);
which only gets executed if the application terminates. This functionality works fine with delete statements and insert statements so I'm guessing it's something wrong with the below logic?
- (BOOL) doesBookExist {
if(selectStmt == nil) {
const char *sql = "select count(*) from books where isbn = ?";
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating select statement. '%s'", sqlite3_errmsg(database));
}
//When binding parameters, index starts from 1 and not zero.
int count = sqlite3_bind_text(selectStmt, 1, [isbn UTF8String], -1, SQLITE_TRANSIENT);
if (SQLITE_DONE != sqlite3_step(selectStmt))
NSAssert1(0, @"Error while selecting. '%s'", sqlite3_errmsg(database));
sqlite3_reset(selectStmt);
return (count > 0);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
sqlite3_bind_text
返回成功/错误代码,而不是结果任何查询。并且步骤应该返回 SQLITE_ROW,因为您有一行结果数据(无论计数是 0 还是更多)。似乎存在错误,因为您期望SQLITE_DONE
,而正确的值为SQLITE_ROW
。然后,要获取计数,您需要使用sqlite3_column_int
执行步骤后。所以像这样:sqlite3_bind_text
returns a success/error code, not the result of any query. And step should returnSQLITE_ROW
, since you have one row of result data (regardless of whether the count is 0 or more). There seemed to be an error, because you were expectingSQLITE_DONE
when the correct value wasSQLITE_ROW
. Then, to get the count, you need to usesqlite3_column_int
after executing step. So something like: