2011-04-16 38 views
20

Me gustaría crear una aplicación donde el usuario haga clic en un botón y se borre la base de datos SQLite. Esto es lo que he intentado hasta ahora:Cómo eliminar todos los elementos de SQLite en Android

db.delete(TABLE_NAME, null, null); 

¿Qué estoy haciendo mal?

+0

El método delete devuelve un valor. ¿Qué valor estás obteniendo? –

+0

¿Eliminar registros de la tabla mediante el trabajo compileStatement? –

+0

Puede eliminar el 'database.sqlite' y volver a crear la estructura después. – ChristopheCVB

Respuesta

43

Su llamada a delete() es correcta. ¿Obtuviste una base de datos escribible? Aquí hay un ejemplo de método que utiliza eliminar:

/** 
* 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); 
} 
+3

Sí, usé 'getWritableDatabase()'. – Cg2916

+0

También deberíamos cerrar el db no? – nithinreddy

16

db.delete (TABLE_NAME, null, null); es la sintaxis correcta para eliminar todas las filas en una tabla. Pero creo que habría dado el nombre de la tabla directamente sin encerrarlo entre comillas dobles. Trate de esta manera

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

Podría ayudar :)

2

Usar este código para borrar todo el contenido de la base de datos

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(); 
+0

Esta parece ser una buena solución para eliminar todos los nombres de tabla, aunque no tiene en cuenta desencadenantes/índices. – Chrispix

+1

Hay una tabla llamada 'sqlite_sequence' que tampoco debe eliminarse. – Darkhogg

3

realidad de otra manera que lo hice fue a DROP las tablas y luego simplemente llamar el método onCreate para el SQLiteDatabase. No sé cuál es más eficiente Delete o Drop porque realmente no he profundizado en la eficiencia de cada método, pero funciona muy bien para mí porque en mi base de datos inicial tengo algunos valores predeterminados establecidos y así cuando llamo al onCreate método para la base de datos Tengo algunos métodos PUT también. Esto ahorra la replicación del código. (En lugar de hacer la eliminación y luego las puts obtengo un propósito múltiple de mi función onCreate).

Lo llamo reset. De modo que solo tiene que hacer db.reset() y luego los valores predeterminados se agregan en el onCreate después de crear sus tablas.

public void reset() throws SQLException { 
    db = DBHelper.getWritableDatabase(); 
    db.execSQL ("drop table "+TABLE_NAME); 
    db.close(); 
    this.DBHelper.onCreate (this.db); 
} 
+0

¿Qué pasa si tengo varias tablas? Llamaría a exeSQL drop table ___ varias veces? –

1
SQLiteDatabase db = this.getWritableDatabase(); //get database 
     db.execSQL("DELETE FROM tablename"); //delete all rows in a table 
db.close(); 
0

para mí comunicado MySQL clásica:

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

funcionó a la perfección. buena suerte :)
ps .: sin arranque/o endtransaction CerrarBaseDeDatos ...

0

Una cosa que podría intentar en el desarrollo de un dispositivo:

configuración de aplicaciones >> >> (el nombre de la aplicación) >> Almacenamiento> > borrar caché y borrar datos

al borrar los datos de la aplicación y la caché de la aplicación, también se limpia la base de datos sql.

0

uso este código:

public void deleteAll() 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.execSQL("delete from "+ TABLE_NAME); 
    db.close(); 
} 

puedes añadir clase DatabaseHandler, este es el código fuente completo:

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