Я хотел бы создать приложение, в котором пользователь нажимает кнопку, и база данных SQLite очищается. Вот что я пробовал до сих пор:
db.delete(TABLE_NAME, null, null);
Что я делаю неправильно?
Я хотел бы создать приложение, в котором пользователь нажимает кнопку, и база данных SQLite очищается. Вот что я пробовал до сих пор:
db.delete(TABLE_NAME, null, null);
Что я делаю неправильно?
Ваш вызов delete() верен. Вы получили доступную для записи базу данных? Ниже приведен пример метода, использующего delete:
/**
* Remove all users and groups from database.
*/
public void removeAll()
{
// db.delete(String tableName, String whereClause, String[] whereArgs);
// If whereClause is null, it will delete all rows.
SQLiteDatabase db = helper.getWritableDatabase(); // helper is object extends SQLiteOpenHelper
db.delete(DatabaseHelper.TAB_USERS, null, null);
db.delete(DatabaseHelper.TAB_USERS_GROUP, null, null);
}
db.delete(TABLE_NAME, null, null); является правильным синтаксисом для удаления всех строк в таблице. Но я думаю, что вы получили бы имя таблицы напрямую, не заключая ее в двойные кавычки. Попробуйте сделать это
db.delete("TABLE_NAME", null, null);
Это может помочь:)
Фактически другим способом я сделал это, чтобы DROP
таблицы, а затем просто вызвать метод onCreate
для SQLiteDatabase
. Я не знаю, какой из них наиболее эффективен Delete
или DROP
, потому что я не очень глубоко вник в то, насколько эффективен каждый метод, но он отлично работает для меня, потому что в моей исходной базе данных у меня установлены некоторые значения по умолчанию когда я вызываю метод onCreate
для базы данных, у меня есть некоторые методы PUT
. Это сохраняет репликацию кода. (вместо удаления, а затем puts я получаю многоцелевую функцию из моей функции onCreate
).
Я называю это reset
. Поэтому вам просто нужно сделать db.reset()
, а затем значения по умолчанию добавляются в onCreate
после создания ваших таблиц.
public void reset () throws SQLException {
db = DBHelper.getWritableDatabase ();
db.execSQL ("drop table "+TABLE_NAME);
db.close ();
this.DBHelper.onCreate (this.db);
}
Используйте этот код для очистки всего содержимого базы данных
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
String tableName="";
if (c.moveToFirst()) {
while ( !c.isAfterLast() ) {
tableName = c.getString( c.getColumnIndex("name"));
if(!tableName.equals('android_metadata')){
db.execSQL("DROP TABLE '"+tableName+"'");
}
c.moveToNext();
}
}
c.close();
SQLiteDatabase db = this.getWritableDatabase(); //get database
db.execSQL("DELETE FROM tablename"); //delete all rows in a table
db.close();
для классического оператора mysql:
SQLiteDatabase sqLiteDatabase = context.openOrCreateDatabase(Database.DATABASE_NAME, Context.MODE_PRIVATE, null, null);
sqLiteDatabase.execSQL("DELETE FROM " + tableName1);
sqLiteDatabase.execSQL("DELETE FROM " + tableName2);
sqLiteDatabase.execSQL("DELETE FROM " + tableName3);
sqLiteDatabase.execSQL("DELETE FROM " + tableName4);
работал отлично. удачи:)
ps.: без start/endtransaction или closeDatabase...
Одна вещь, которую вы могли бы попробовать при разработке на устройстве:
настройки → приложения → (ваше имя приложения) → Хранение → очистить кеш и очистить данные
очистив данные приложения и кеш приложения, вы также уничтожите базу данных sql.