Android应用SQLite数据库定位异常:未在/data/user/0/com.programName路径下找到目标数据库
Android应用SQLite数据库定位异常:未在/data/user/0/com.programName路径下找到目标数据库
嘿,我来帮你捋捋怎么找到这个数据库文件!很多人找Android SQLite数据库都会踩几个常见的坑,我给你一步步拆解排查:
首先得先把两个概念搞清楚:你代码里的locationLookupDb是数据库里的表名,而真正的数据库文件名是你初始化DBAdapter时传入的name参数,这俩可不是一回事哦!
接下来给你列几个必查的点:
- 先确认你初始化
DBAdapter时传的name是什么。比如你要是这么写的:DBAdapter dbHelper = new DBAdapter(this, "MyLocationDB", null);,那你要找的数据库文件就是MyLocationDB,别傻乎乎去找表名对应的文件哈。 - 重中之重:你有没有调用过
getWritableDatabase()或者getReadableDatabase()方法?光new了DBAdapter但没打开数据库的话,系统根本不会生成物理文件!必须执行这两个方法里的任意一个,数据库文件才会在指定目录创建出来,同时你的onCreate方法才会被触发创建表。 - 如果你用的是未root的普通设备,直接用手机自带的文件管理器访问
/data/user/0/com.programName路径是没权限的,这时候用Android Studio的Device File Explorer就方便多了:- 打开Android Studio,从顶部菜单栏点
View > Tool Windows > Device File Explorer调出工具 - 在列表里找到你的应用包名(就是
com.programName),点进去找到databases文件夹,目标数据库文件就在这里面
- 打开Android Studio,从顶部菜单栏点
- 还有个容易忽略的情况:如果初始化
DBAdapter时name传的是null,系统会创建内存数据库,这种数据库只存在于运行内存里,不会生成本地文件,程序一退出就没了,自然找不到。
给你举个正确的调用示例,你对比看看自己的代码有没有问题:
// 在Activity或者Fragment里初始化 DBAdapter dbHelper = new DBAdapter(getContext(), "LocationDatabase.db", null); // 必须调用这个方法才会触发数据库文件创建和表初始化 SQLiteDatabase db = dbHelper.getWritableDatabase();
按照上面的步骤排查,基本就能找到你的数据库文件啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

