我正在研究一些SQLite代码,并希望检查数据库。如果我在模拟器上运行代码,我可以使用DDMS文件管理器从data \ data \ myProject \ databases中提取文件,但如果我在实际硬件上运行它,则无法访问data \ data文件夹。除了获得手机的root权限之外,还有其他方法吗?
答案 0 :(得分:19)
SQLIte数据库实际上只是一个存储在手机内存中的文件,您可以将其复制到手机SD卡中,然后通过PC轻松访问它。以下是完全符合您需求的功能。在使用函数之前,请确保更改包名称和数据库名称。
public static void backupDatabase() throws IOException {
//Open your local db as the input stream
String inFileName = "/data/data/your.package.name/databases/database.sqlite";
File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String outFileName = Environment.getExternalStorageDirectory()
+ "/database.sqlite";
//Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer))>0){
output.write(buffer, 0, length);
}
//Close the streams
output.flush();
output.close();
fis.close();
}
您可以从代码中看到,数据库始终存储在文件夹中:
/data/data/your.package.name/databases/
名称(在我们的示例中为“database.sqlite”)是您在扩展SQLiteOpenHelper时选择的名称。显然,您还需要将“your.package.name”替换为应用程序包的名称。
答案 1 :(得分:2)
使用
将文件复制到/ mnt / sdcardcp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard
使用adb,然后使用
从/ mnt / sdcard复制到桌面adb pull /mnt/sdcard/<filename>
然后使用sqlite3查看它。
答案 2 :(得分:2)
您必须根设备。转到命令提示符并转到adb所在的位置。
e.g。
C:\ Program Files \ Android \ android-sdk \ platform-tools
输入adb root
。现在转到文件资源管理器并查看。
答案 3 :(得分:1)
我相信您的应用程序可以更改其本地存储数据文件的unix权限,以便其他应用程序和adb可以访问它们。
但是,您的应用程序无法更改安全手机的/ data目录中缺少列表权限。
因此,您必须使用'adb pull / full / path / to / file'来获取文件 - 您无法浏览到它,因为您无法生成/ data或其他几个中间目录父项的列表你的档案。
答案 4 :(得分:1)
关于这个问题的唯一方法就是将文件放在一些可以在开发过程中像SD卡上访问它的地方。然后,一旦你感到满意,就可以正确地将文件放在任何你想要的地方。
我之所以这么说,是因为我有零售商Nexus One和开发商Nexus One。在使用DDMS文件资源管理器时,我注意到我可以浏览开发人员设备上的数据文件夹,但无法在零售设备上浏览。我扎根我的零售设备并没有帮助。
所以我想在这个问题上需要做更多的研究。但在那之前,我希望这会有所帮助。