Android应用的数据库文件默认存储在/data/data/<包名>/databases/
目录下,可通过以下步骤查看:
Device File Explorer
。/data/data/<应用包名>/databases/
/data/data/com.example.myapp/databases/mydb.db
Save As...
导出到本地,再用SQLite工具(如DB Browser)打开。注意:需开启设备的USB调试
,且真机可能需要Root权限(模拟器无此限制)。
// 获取数据库路径 File dbFile = context.getDatabasePath("mydb.db"); if (dbFile != null) { Log.d("DB_STATUS", "数据库存在,路径:" + dbFile.getAbsolutePath()); } else { Log.d("DB_STATUS", "数据库不存在"); }
public boolean isTableExist(SQLiteDatabase db, String tableName) { Cursor cursor = db.rawQuery("SELECT COUNT() FROM sqlite_master WHERE type='table' AND name='" + tableName + "'", null); if (cursor != null) { boolean exists = cursor.getInt(0) > 0; cursor.close(); return exists; } return false; }
工具 | 适用场景 | 操作步骤 |
---|---|---|
SQLite Browser | 离线分析导出的数据库文件 | 导出.db 文件用浏览器直接打开文件 |
Stetho | 实时调试(需集成库) | 添加依赖com.facebook.stetho:stetho-okhttp 访问 chrome://inspect |
ADB命令行 | 快速验证数据库是否存在 | adb shell "ls /data/data/com.example.myapp/databases/" |
// 检查数据库是否可读可写 SQLiteDatabase db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE); Log.d("DB_INFO", "数据库状态:" + (db.isOpen() ? "已打开" : "未打开")); Log.d("DB_INFO", "是否只读:" + db.isReadOnly()); db.close();
A1:
通过代码调用deleteDatabase
方法:
SQLiteDatabase.deleteDatabase(context.getDatabasePath("mydb.db"));
或通过ADB命令删除:
adb shell "rm /data/data/com.example.myapp/databases/mydb.db"
A2:
File dbFile = context.getDatabasePath("mydb.db"); File backupFile = new File(context.getExternalFilesDir(null), "mydb_backup.db"); try (InputStream in = new FileInputStream(dbFile); OutputStream out = new FileOutputStream(backupFile)) { byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); }
.db
文件,或用ADB命令:adb pull /data/data/com.example.myapp/databases/mydb.db ./