2009-11-08 71 views
7

Tôi đang sử dụng fmdb để quản lý cơ sở dữ liệu của mình. Tôi không thể tìm thấy bất kỳ ví dụ để xóa một hàng từ một bảng trong fmdb. Tôi đã thửLàm thế nào để xóa một hàng trong một bảng cơ sở dữ liệu sqlite?

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

nhưng không hoạt động vì khi tôi kiểm tra tổng số mục nhập trong bảng, tôi nhận được con số tương tự như trước khi thực hiện câu lệnh trên. Vì vậy, một cách thích hợp để xóa một hàng từ một bảng bằng cách sử dụng fmdb là gì?

+0

How are you xác định số lượng các mục trong bảng? –

+0

Ví dụ: Tôi đang thực hiện FMResultSet * rs = [cơ sở dữ liệu executeQuery: @ "select * from tableName"]; và sau đó lưu trữ kết quả trong NSMutableArray. – MAX

Trả lời

12

FMDB có thể hơi khó tính nếu bạn không truyền đối tượng dưới dạng NSNumber. Đây là cách truy vấn định dạng được hỗ trợ và an toàn.

[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]]; 
+0

Tuyệt vời! Điều này đã giải quyết được vấn đề của tôi! – Jon

11

Bạn nên thay thế:

... [cơ sở dữ liệu executeQuery: sqlStat] ...

với:

... [cơ sở dữ liệu executeUpdate: sqlStat];

Ngoài ra, hãy thử thêm:

[database beginTransaction]; 

trước khối CRUD của bạn, và:

[database commit]; 

sau khi thực hiện một bản cập nhật/xóa/hoạt động chèn.

;)

+0

Không chắc chắn nếu điều này sẽ giúp bất cứ ai khác nhưng tôi đang sử dụng sqlite3 từ dòng lệnh và tôi đã ban hành một 'BEGIN GIAO DỊCH;' trước và 'COMMIT;' sau khi chạy câu lệnh 'DELETE' của tôi. Lần đầu tiên tôi sử dụng CLI và đây là những gì làm việc cho tôi. Cảm ơn mẹo, @Florin. – harperville

+0

np, @harperville :) – Florin

+0

Làm việc với [database executeUpdate: sqlStat], trong đó sqlStat là "DELETE" – kokemomuke

1

tôi cũng chạy vào cùng một triệu chứng. và vấn đề của tôi là i didnt cuộc gọi (và gây ra "ra khỏi bộ nhớ" lỗi)

[db open]; 

hãy chắc chắn để làm điều này để gỡ rối vấn đề fmdb bạn db.traceExecution = YES; db.logsErrors = YES;

0

bạn cần phải đảm bảo tất cả các quá trình

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 
Các vấn đề liên quan