从sqlite数据库中删除所有表

我做了大量的研究,无法find合适的方法来删除SQLite数据库中的所有表。 最后,我做了一个代码来从数据库中获取所有的表名, 我试着用检索到的表名逐个删除表 。 它没有工作。

请build议我一个从数据库中删除所有表的方法。

这是我使用的代码:

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

函数deleteall()在button上调用,点击whos代码如下:

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

  • 没有closures游标的android的缺点
  • android,游标返回布尔值?
  • Android,Diacritic Insensitive SQLite Search
  • 如何实现导出sqlite到android中的excel / csv文件?
  • Sqlite数据库onUpgrade()不会被调用
  • Android:通过Content Provider访问SQLite数据库还是实现DAO?
  • 为什么要在Android中使用sqlite数据库?
  • 尝试查询列时被删除的列无效
  • 使用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); } 

    Tim Biegeleisen的回答几乎适用于我,但是因为我在表中使用了AUTOINCREMENT主键,所以有一个名为sqlite_sequence的表。 当例程试图删除该表时,SQLite会崩溃。 我也无法捕捉到这个例外。 查看https://www.sqlite.org/fileformat.html#internal_schema_objects ,我了解到可能有几个这样的内部模式表,我不想放弃。 文档说任何这些表都有以sqlite_开头的名字,所以我写了这个方法

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

    对我来说,工作解决scheme是:

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

    删除数据库,而不是删除表,然后创build新的名称,如果你需要的话。 使用下面的代码

     context.deleteDatabase(DATABASE_NAME); or context.deleteDatabase(path);