Как удалить все элементы из SQLite в Android
Я хотел бы сделать приложение, где пользователь нажимает кнопку, и базы данных SQLite очищается. Вот что я пробовал до сих пор:
db.delete(TABLE_NAME, null, null);
что я делаю не так?
8 ответов
ваш вызов 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
. Я не знаю, что является наиболее эффективным!--4--> или Drop
потому что я действительно не копался в том, насколько эффективен каждый метод, но он отлично работает для меня, потому что в моей исходной базе данных у меня есть некоторые значения по умолчанию, и поэтому, когда я вызываю onCreate
метод для базы данных у меня есть несколько PUT
методов там тоже. Это сохраняет репликацию кода. (вместо удаления и тогда я получаю многоцелевое назначение из моего
используйте этот код для очистки всего содержимого базы данных
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);
работало отлично. удачи :)
ПС.: без start/endtransaction или closeDatabase...
одна вещь, которую вы можете попробовать при разработке на устройстве:
настройки> > приложения>>(ваше имя приложения)>>хранение>> очистить кэш и очистить данные
очистив данные приложения и кэш приложения, вы также удаляете базу данных sql.
используйте этот код:
public void deleteAll()
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from "+ TABLE_NAME);
db.close();
}
вы можете добавить класс DatabaseHandler, это полный исходный код:
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
public static final String DATABASE_NAME = "OffLineMessagesClient";
// Contacts table name
public static final String TABLE_NAME = "messages_client";
// Contacts Table Columns names
private static final String KEY_ENTITY_ID = "entity_id";
private static final String KEY_MESSAGE = "message";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ KEY_ENTITY_ID + " INTEGER,"
+ KEY_MESSAGE + " TEXT"
+ ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
// Create tables again
onCreate(db);
}
public void deleteAll()
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from "+ TABLE_NAME);
db.close();
}
}