最近做iOS项目,需要把Android端的数据库导出来比较一下,这个还挺麻烦。
如果用模拟器的话,可以直接用DDMS查看数据库的路径,然后导出,这样最方便。但我这个项目需要用到Google的服务, 模拟器上无法运行。
如果是真机,在不越狱的情况下是无法查看数据库路径的,没办法,只能用代码把数据库拷贝到SDCard上,然后用File Manager
这个app把数据库文件导出来。
用代码拷贝文件到SDCard上,需要在AndroidManifest.xml
文件中加入如下权限:1
2<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果你的真机是6.0以上的系统,还需要在程序中向用户请求权限:
1 | public void requestPermission() { |
最后,将数据库拷贝到SDCard。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public void copyDatabase() {
String dbPath = "/data/data/<packageName>/databases/" + DatabaseName;
File file = new File(dbPath);
if (file.exists()) {
File dbCopy = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "copy.db");
try {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(dbPath));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dbCopy));
byte[] bb = new byte[1024];
int n;
while ((n = in.read(bb)) != -1) {
out.write(bb, 0, n);
}
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}