sqlite3_step(statement) == SQLITE_DONE 语句不返回是 [英] sqlite3_step(statement) == SQLITE_DONE statement not return yes
本文介绍了sqlite3_step(statement) == SQLITE_DONE 语句不返回是的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所有时间都没有返回.
-(BOOL)updateProductTable:(NSString *)productid column_shop_Product_quantity:(NSString *) productquantity{
NSLog(@"%@",productid);
NSLog(@"%@",productquantity);
const char *dbpath = [databasepath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *updateSQL = [NSString stringWithFormat:@"UPDATE ShopProduct set column_shop_Product_quantity=%@ WHERE column_shop_Product_id=%@",productquantity,productid];
NSLog(@"%@",updateSQL);
const char *update_stmt = [updateSQL UTF8String];
if (sqlite3_prepare_v2(database, update_stmt, -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_DONE)
{
sqlite3_reset(statement);
return YES;
}
else {
return NO;
}
sqlite3_finalize(statement);
}
}
sqlite3_close(database);
return NO;
}
推荐答案
您的代码有几个问题:
- 切勿使用
stringWithFormat:
将值绑定到查询. - 大多数情况下您不会关闭数据库.
- 在大多数情况下,您不会完成准备好的语句.
- 您应该添加更多错误日志来确定任何问题的原因.
- 为什么将产品数量作为字符串而不是数字传递?
- 你应该使用
sqlite3_open_v2
. - 对数据库和准备好的语句使用局部变量.
以下是针对所有这些问题更新的代码:
Here is your code updated for all of these issues:
-(BOOL)updateProductTable:(NSString *)productid column_shop_Product_quantity:(NSString *)productquantity {
NSLog(@"%@",productid);
NSLog(@"%@",productquantity);
BOOL res = NO;
sqlite3 *database = NULL;
const char *dbpath = [databasepath UTF8String];
if (sqlite3_open_v2(dbpath, &database, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK)
{
const char *updateSQL = "UPDATE ShopProduct set column_shop_Product_quantity=? WHERE column_shop_Product_id=?";
sqlite3_stmt *statement = NULL;
if (sqlite3_prepare_v2(database, updateSQL, -1, &statement, NULL) == SQLITE_OK)
{
sqlite3_bind_int(statement, 0, [productquantity intValue]);
sqlite3_bind_text(statement, 1, [productid UTF8String], -1, SQLITE_TRANSIENT);
if (sqlite3_step(statement) == SQLITE_DONE) {
res = YES;
} else {
NSLog(@"Unable to update data: %s", sqlite3_errmsg(database));
}
sqlite3_finalize(statement);
} else {
NSLog(@"Unable to prepare statement: %s", sqlite3_errmsg(database));
}
sqlite3_close(database);
} else {
NSLog(@"Unable to open database at %@: %s", databasepath, sqlite3_errmsg(database));
}
return res;
}
这篇关于sqlite3_step(statement) == SQLITE_DONE 语句不返回是的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文