Удалить все данные с помощью синтаксиса SQLite? - PullRequest
5 голосов
/ 21 января 2011

Я сделал кнопку, которая удаляет все объекты в моем массиве, который показан в моем tableView. Затем он перезагружает данные, и табличное представление пусто. Но как я могу удалить все данные из моей базы данных SQLite, а не только массив? Теперь данные появляются при перезагрузке. Я пробовал это:

Кнопка void:

   - (void) deleteAllButton_Clicked:(id)sender {

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


    }

Appdelegate void:

-(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);
}

Ответы [ 3 ]

20 голосов
/ 21 января 2011

Ну, обычный синтаксис SQL будет:

DELETE FROM tablename
6 голосов
/ 18 августа 2011

Если у вас есть стандартный первичный столбец идентификатора (и вы должны), вы можете сделать

DELETE FROM tablename WHERE id > -1;

И это удалит все строки в таблице, так как идентификатор не будет меньше 0.

2 голосов
/ 09 мая 2011

DELETE FROM tablename не работает для меня. Я использовал базу данных sqlite3 на iPhone, что, как я полагаю, было и на постере. Чтобы заставить это работать, мне нужно было:

DROP table tablename

с последующим оператором CREATE, если бы я хотел, чтобы таблица еще существовала (без каких-либо строк).

Конечно, это требует знания правильного утверждения CREATE. Использование плагина SQLManager для Firefox быстро изменило для меня правильный оператор CREATE для использования. Я так и не понял, почему DELETE FROM tablename не сработало, но в моем случае это точно не сработало.

...