7

データベースの管理に fmdb を使用しています。fmdb のテーブルから行を削除する例が見つかりませんでした。私は試した

  NSString *sqlStat=@"DELETE from tableName WHERE id=3";    
  FMResultSet *rs = [database executeQuery:sqlStat];

テーブル内のエントリの総数を確認したときに、上記のステートメントを実行する前と同じ数を取得しているため、機能しません。では、fmdb を使用してテーブルから行を削除する適切な方法は何ですか?

4

4 に答える 4

12

オブジェクトを NSNumber として渡さないと、FMDB は少し厄介になる可能性があります。これは、クエリをフォーマットするためのサポートされている安全な方法です。

[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]];
于 2009-11-08T15:03:18.340 に答える
11

以下を置き換える必要があります。

... [データベース executeQuery:sqlStat] ...

と:

... [データベース executeUpdate:sqlStat];

また、追加してみてください:

[database beginTransaction];

CRUD ブロックの前、および:

[database commit];

更新/削除/挿入操作を実行した後。

;)

于 2010-03-06T17:06:30.597 に答える
1

私も同じ症状に遭遇しました。そして私の問題は私が電話しなかったことでした(そして「メモリ不足」エラーを引き起こしました)

[db open];

fmdb の問題をデバッグするには、必ずこれを実行してください。db.logsErrors=YES;

于 2011-06-11T14:12:14.450 に答える
0

すべてのプロセスを確実にする必要があります

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
于 2012-08-02T03:38:05.360 に答える