如何删除sqlite数据库表中的一行?
Posted
技术标签:
【中文标题】如何删除sqlite数据库表中的一行?【英文标题】:How to delete a row in a sqlite database table? 【发布时间】:2009-11-08 11:05:02 【问题描述】:我正在使用 fmdb 来管理我的数据库。我找不到从 fmdb 的表中删除一行的任何示例。我试过了
NSString *sqlStat=@"DELETE from tableName WHERE id=3";
FMResultSet *rs = [database executeQuery:sqlStat];
但它不起作用,因为当我检查表中的条目总数时,我得到的数字与执行上述语句之前相同。 那么,使用 fmdb 从表中删除一行的正确方法是什么?
【问题讨论】:
您如何确定表格中的条目数? 例如我在做 FMResultSet *rs = [database executeQuery:@"select * from tableName"];然后将结果存储在 NSMutableArray 中。 【参考方案1】:如果您不将对象作为 NSNumber 传递,FMDB 可能会有点挑剔。这是格式化查询的受支持且安全的方式。
[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]];
【讨论】:
【参考方案2】:你应该替换:
... [数据库执行查询:sqlStat] ...
与:
... [数据库执行更新:sqlStat];
另外,尝试添加:
[database beginTransaction];
在您的 CRUD 块之前,并且:
[database commit];
在执行更新/删除/插入操作之后。
;)
【讨论】:
不确定这是否对其他人有帮助,但我在命令行中使用 sqlite3,并且在运行我的DELETE
语句之后发出了 BEGIN TRANSACTION;
和 COMMIT;
。我第一次使用 CLI,这对我有用。感谢@Florin 的提示。
与 [database executeUpdate:sqlStat] 一起使用,其中 sqlStat 为“DELETE”【参考方案3】:
我也遇到了同样的症状。 我的问题是我没有打电话(并导致“内存不足”错误)
[db open];
请务必这样做以调试您的 fmdb 问题 db.traceExecution=YES; db.logsErrors=YES;
【讨论】:
【参考方案4】:你需要确保所有的流程
NSString *query = @"delete from places where published = 1";
const char *sqlStatement = [query UTF8String];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
// Read the data from the result row
NSLog(@"result is here");
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
int numberOfEffectedRow = sqlite3_changes(database);
return numberOfEffectedRow; // get number of effected rows
【讨论】:
以上是关于如何删除sqlite数据库表中的一行?的主要内容,如果未能解决你的问题,请参考以下文章