Eliminar todas las tablas de la base de datos sqlite

He hecho un montón de investigación y no fue capaz de encontrar un método adecuado para eliminar todas las tablas en una base de datos SQLite. Por último, hice un código para obtener todos los nombres de tabla de la base de datos y traté de eliminar las tablas utilizando los nombres de tabla recuperados uno por uno . No funcionó tan bien.

Por favor, sugerirme un método para eliminar todas las tablas de la base de datos.

Este es el código que he usado:

public void deleteall(){ SQLiteDatabase db = this.getWritableDatabase(); Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); do { db.delete(c.getString(0),null,null); }while (c.moveToNext()); } 

La función deleteall() se llama en el clic de botón el código de whos se da como abajo:

 public void ButtonClick(View view) { String Button_text; Button_text = ((Button) view).getText().toString(); if(Button_text.equals("Delete Database")) { DatabaseHelper a = new DatabaseHelper(this); a.deleteall(); Toast.makeText(getApplicationContext(), "Database Deleted Succesfully!", Toast.LENGTH_SHORT).show(); }} 

Utilice DROP TABLE :

 // query to obtain the names of all tables in your database Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); List<String> tables = new ArrayList<>(); // iterate over the result set, adding every table name to a list while (c.moveToNext()) { tables.add(c.getString(0)); } // call DROP TABLE on every table name for (String table : tables) { String dropQuery = "DROP TABLE IF EXISTS " + table; db.execSQL(dropQuery); } 

La respuesta de Tim Biegeleisen casi funcionó para mí, pero como AUTOINCREMENT las claves primarias de AUTOINCREMENT en mis tablas, había una tabla llamada sqlite_sequence . SQLite se bloquearía cuando la rutina intentara eliminar esa tabla. No pude captar la excepción tampoco. Mirando https://www.sqlite.org/fileformat.html#internal_schema_objects , aprendí que podría haber varias de estas tablas de esquema interno que no quería dejar caer. La documentación dice que cualquiera de estas tablas tienen nombres que comienzan con sqlite_ así que escribí este método

 private void dropAllUserTables(SQLiteDatabase db) { Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); //noinspection TryFinallyCanBeTryWithResources not available with API < 19 try { List<String> tables = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { tables.add(cursor.getString(0)); } for (String table : tables) { if (table.startsWith("sqlite_")) { continue; } db.execSQL("DROP TABLE IF EXISTS " + table); Log.v(LOG_TAG, "Dropped table " + table); } } finally { cursor.close(); } } 

Para mí, la solución de trabajo es:

  Cursor c = db.rawQuery( "SELECT name FROM sqlite_master WHERE type IS 'table'" + " AND name NOT IN ('sqlite_master', 'sqlite_sequence')", null ); if(c.moveToFirst()){ do{ db.execSQL("DROP TABLE " + c.getString(c.getColumnIndex("name"))); }while(c.moveToNext()); } 

Eliminar base de datos en lugar de eliminar tablas y, a continuación, crear nuevo con el mismo nombre si es necesario. Utilizar el siguiente código

 context.deleteDatabase(DATABASE_NAME); or context.deleteDatabase(path); 
  • ¿Soporta Android JDBC?
  • SQLite rawQuery campos de selecciónArgs y enteros
  • SQLite: No se puede enlazar argumento en el índice 1 porque el índice está fuera de rango. La sentencia tiene 0 parámetros
  • GreenDAO no genera restricción FOREIGN KEY (...) en la tabla
  • Identificador único para SMS y contactos (para comprobar la duplicación) en Android
  • Mostrar el contenido de la base de datos sqlite en formato pdf en android
  • NoClassDefFoundError al usar greenDao
  • SQLite Eliminar Cascade no funciona
  • Insertar matriz en la base de datos SQLite en android
  • Close () nunca fue explícitamente llamado en Android y SQlite
  • Obtener ID de fila de una tabla SQLite FTS3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.