以下以 SQLiteDatabase
为例,介绍两种主流实现方式:
方法 | 实现步骤 | 适用场景 |
---|---|---|
删除数据库文件 | 通过 getDatabasePath(NAME) 获取数据库文件路径调用 deleteDatabase(file) 删除文件 | 彻底删除数据库(包括所有表) |
使用 SQLiteOpenHelper | 重写 onUpgrade() 方法调用 execSQL("DROP TABLE IF EXISTS table_name") 删除表 | 仅删除部分表或重建数据库 |
直接删除数据库文件
// 获取数据库文件路径 File dbFile = getDatabasePath(DB_NAME).getFile(); if (dbFile.exists()) { // 删除数据库文件 boolean isDeleted = dbFile.delete(); Log.d(TAG, "数据库删除成功: " + isDeleted); }
通过 SQLiteOpenHelper 删除表
public class MyDatabaseHelper extends SQLiteOpenHelper { public MyDatabaseHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 删除所有表(需手动遍历所有表名) db.execSQL("DROP TABLE IF EXISTS table1"); db.execSQL("DROP TABLE IF EXISTS table2"); // 重新创建表... } }
WRITE_EXTERNAL_STORAGE
权限。onUpgrade()
删除表时,需确保版本号递增触发回调。问题1:如何备份数据库?
解答:可通过复制数据库文件到外部存储或云端实现备份。
// 备份数据库到外部存储 File source = getDatabasePath(DB_NAME).getFile(); File dest = new File(getExternalFilesDir(null), "backup.db"); try (InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(dest)) { byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); }
问题2:如何删除数据库中的某张表?
解答:直接执行 DROP TABLE
SQL 语句,注意区分 DROP TABLE
(删除表结构)和 DELETE FROM
(仅删除数据):
SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("DROP TABLE IF EXISTS users"); // 删除表结构 // 或 db.execSQL("DELETE FROM users"); // 仅清空数据