Как удалить все элементы из SQLite в Android - PullRequest
21 голосов
/ 16 апреля 2011

Я хотел бы создать приложение, в котором пользователь нажимает кнопку, и база данных SQLite очищается. Вот что я пробовал до сих пор:

db.delete(TABLE_NAME, null, null);

Что я делаю не так?

Ответы [ 9 ]

44 голосов
/ 16 апреля 2011

Ваш вызов 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);
}
16 голосов
/ 05 мая 2012

db.delete (TABLE_NAME, null, null);правильный синтаксис для удаления всех строк в таблице.Но я думаю, что вы дали бы имя таблицы напрямую, не заключая его в двойные кавычки.Попробуйте вот так

db.delete("TABLE_NAME", null, null);

Это может помочь:)

3 голосов
/ 07 августа 2013

На самом деле, другой способ сделать это - DROP таблицы, а затем просто вызвать метод onCreate для SQLiteDatabase. Я не знаю, какой из них наиболее эффективен Delete или Drop, потому что я не особо задумывался о том, насколько эффективен каждый метод, но он прекрасно работает для меня, потому что в моей исходной базе данных у меня установлены некоторые значения по умолчанию и так когда я вызываю метод onCreate для базы данных, у меня там тоже есть некоторые методы PUT. Это сохраняет репликацию кода. (вместо того, чтобы выполнять удаление, а затем путы, я получаю многоцелевое назначение из моей функции 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);
}
3 голосов
/ 21 марта 2013

Используйте этот код для очистки всего содержимого базы данных

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();
2 голосов
/ 15 декабря 2014
SQLiteDatabase db = this.getWritableDatabase(); //get database
        db.execSQL("DELETE FROM tablename"); //delete all rows in a table
db.close();
1 голос
/ 07 февраля 2018

используйте этот код:

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();
}
}
0 голосов
/ 20 февраля 2019

эта работа для меня:

 public void removeAll()
{

    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_NAME, null, null);
    db.close();



}
0 голосов
/ 18 сентября 2016

Одна вещь, которую вы можете попробовать при разработке на устройстве:

настройки >> приложения >> (имя вашего приложения) >> Хранилище >> очистить кеш и очистить данные

очистив данные приложения и кэш приложения, вы также стираете базу данных sql.

0 голосов
/ 03 марта 2015

для меня классическое утверждение 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);

работал отлично. удачи :)
пс .: без запуска / завершения транзакции или закрытия базы данных…

...