2011-01-21 36 views
4

我做了一个按钮,删除我的数组中显示在我的tableView中的所有对象。然后它重新加载数据并且tableview是空的。但是,我怎样才能从SQLite数据库中删除所有数据,而不仅仅是数组?现在数据在我重新启动时发生。我曾经尝试这样做:使用SQLite删除语法删除所有数据?

按钮无效:

- (void) deleteAllButton_Clicked:(id)sender { 

    [appDelegate removeAllBooks:nil]; 
    [self.tableView reloadData]; 


    } 

的appdelegate无效:

-(void) removeAllBooks:(Book *)bookObj { 
//Delete it from the database. 
[bookObj deleteAllBooks]; 

//Remove it from the array. 
[bookArray removeAllObjects]; 
} 

在Book.m删除语法

- (void) deleteAllBooks { 
if(deleteStmt == nil) { 
    const char *sql = "WHAT DO I HAVE TO DO TO DELETE ALL THE ROWS?"; 
    if(sqlite3_prepare_v2(database, sql, -1, &deleteStmt, NULL) != SQLITE_OK) 
    NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database)); 
} 

//When binding parameters, index starts from 1 and not zero. 
sqlite3_bind_int(deleteStmt, 1, bookID); 

if (SQLITE_DONE != sqlite3_step(deleteStmt)) 
    NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database)); 

sqlite3_reset(deleteStmt); 
} 

回答

19

好了,正常的SQL语法将:

DELETE FROM tablename 
+0

我发现解决问题是什么。当我将NSLog插入到删除语法中时,我没有得到任何响应。这意味着appDelegate void不会向book.m发送消息来执行删除操作...嗯.. 如何从我的RootViewcontroller中访问我的按钮操作的deleteAllBooks方法? – Leif 2011-01-21 18:55:10

+0

hvis duskjøntehva jeg mente ... – Leif 2011-01-21 18:56:43

2

DELETE FROM tablename没有为我工作。我在iPhone上使用了一个sqlite3数据库,我认为这张海报也是。对我来说,得到这个工作,我需要:

DROP table tablename 

后跟一个CREATE声明,如果我想仍然存在(没有任何行)的表。

当然,这需要知道正确的CREATE声明。使用Firefox的SQLManager插件可以快速为我设计正确的CREATE语句。我从来没有想过为什么DELETE FROM tablename没有工作,但它绝对没有,在我的情况。

6

如果你有一个标准的主ID列(你应该),你可以做

DELETE FROM tablename WHERE id > -1; 

,这将删除表中的所有行,因为没有ID小于0