【发布时间】:2014-02-03 00:39:22
【问题描述】:
我试图从我的数据库“下面提到的代码”中删除一行,但是它永远不会删除该行,并且似乎也永远不会调用 prepare 语句。
我可以插入和更新,但我这辈子都想不通..
barcode 是从可编辑的表格视图传递给方法的字符串变量。
当我记录 deletSQL 字符串时,我可以看到正确的值,但实际上从未删除记录。
有关更多信息,数据库中的条形码是主键。
此外,数据库路径都是正确的,并且它调用了正确的 db 文件。
只是删除功能不起作用...
-(void)delete:(NSString *)barcode{
const char *dbpath = [databasePath3 UTF8String];
if (sqlite3_open(dbpath, &database3) == SQLITE_OK)
{
NSLog(@"Opened OK");
NSString *deleteSQL = [NSString stringWithFormat: @"delete from assets where assetBarcode=\"%@\'",barcode];
NSLog(@"%@",deleteSQL);
const char *sql = [deleteSQL UTF8String];
if(sqlite3_prepare_v2(database3, sql, 1, &deleteStatement, NULL) == SQLITE_OK)
{
NSLog(@"SQL OK?");
if (sqlite3_step(deleteStatement) == SQLITE_ROW)
{
sqlite3_bind_text(deleteStatement, 1, [barcode UTF8String], -1, SQLITE_TRANSIENT);
}
}
else{
NSLog(@"WHAAAATTTTT");
}
}
sqlite3_step(deleteStatement);
sqlite3_reset(deleteStatement);
sqlite3_close(database3);
}
【问题讨论】:
-
为什么要使用 sqlite3_reset 语句?下面的示例删除行代码。 sqlretVal = sqlite3_prepare_v2(dbConnection, insert_stmt, -1, &statement, NULL); if(sqlretVal == SQLITE_OK) { if(sqlite3_step(statement) == SQLITE_DONE) { retVal = 删除记录; } else { retVal = 记录未删除; } } 其他 { retVal = sqlretVal; } sqlite3_finalize(语句); sqlite3_close(dbConnection);
标签: ios database sqlite sql-delete