Android 开发中如何检测指定 SQLite 数据库是否已存在
Android SQLite数据库存在性检测实现方法
你现在用的openOrCreateDatabase方法会在数据库不存在时自动创建,没法用来做存在性检测,直接用下面两种方案实现即可:
方案1:直接检测数据库本地文件是否存在
Android系统中应用自建的SQLite数据库默认存储在/data/data/[应用包名]/databases/目录下,直接检测对应路径的文件是否存在即可,不需要主动打开数据库,性能更高:
// 检测数据库是否存在的方法 private boolean isDatabaseExists(String dbName) { File dbFile = getDatabasePath(dbName); return dbFile.exists(); }
按钮点击事件中直接调用即可:
checkBtn.setOnClickListener(v -> { if (isDatabaseExists(DB_NAME)) { // 数据库存在的逻辑 } else { // 数据库不存在的逻辑 } });
方案2:打开数据库同时校验可用性
如果需要同时确认数据库文件未损坏、可以正常打开,用这种方式:
private boolean isDatabaseValid(String dbName) { SQLiteDatabase tempDB = null; try { String dbPath = getDatabasePath(dbName).getAbsolutePath(); // 只读模式打开,不会自动创建数据库 tempDB = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { // 数据库不存在/损坏/无权限打开,都返回不存在 return false; } finally { if (tempDB != null) { tempDB.close(); } } return true; }
注意事项
- 两种方案都不会自动创建不存在的数据库,符合检测需求
- 如果你的数据库存放在自定义路径(比如外部存储),把
getDatabasePath(dbName)替换成你自定义的文件路径即可 - 访问应用私有data目录下的数据库不需要申请额外的存储权限
内容的提问来源于stack exchange,提问作者roshanpeter
相关产品推荐
相关产品推荐

