我的应用程序有一个数据库。现在我想将数据库复制到标准用户文件夹或 SD 卡中进行备份。在 Eclipse 中,我在 data/data/database 中找到它——但真实设备上的数据库在哪里?
问问题
107 次
4 回答
0
Eclipse显示的路径是对的,绝对路径因设备而异,如果你已经root了设备就可以看到文件了。始终在 /data/data/* 中。如果您的设备未植根,则看不到此文件
于 2013-08-16T11:12:53.297 回答
0
在真实设备中,您无法访问这些文件!!!
于 2013-08-16T11:15:12.830 回答
0
试试这个...只需替换 lite.db 它是我的数据库的名称。
private void copyDB() {
File dir = new File(Environment.getExternalStorageDirectory()
+ "/backup");
if (!dir.exists()) {
dir.mkdirs();
}
File from = new File("/data/data/" + getPackageName() + "/databases/",
"lite.db");
File to = new File(dir, "lite.db");
try {
FileInputStream in = new FileInputStream(from);
FileOutputStream out = new FileOutputStream(to);
FileChannel fromChannel = null, toChannel = null;
try {
fromChannel = in.getChannel();
toChannel = out.getChannel();
fromChannel.transferTo(0, fromChannel.size(), toChannel);
} finally {
if (fromChannel != null)
fromChannel.close();
if (toChannel != null)
toChannel.close();
}
} catch (IOException e) {
Log.e("backup", "Error backuping up database: " + e.getMessage(), e);
}
}
也不要忘记添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-08-16T11:17:05.790 回答
0
数据库存储在设备数据目录中,您可以使用Environment.getDataDirectory()
. 在此目录中,您的数据库存储在以下路径下:/data/YOUR.PACKAGE.NAME/databases/YOUR.DB.NAME
.
这是一个如何备份数据库的小示例:
public void exportDB() {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if(sd.canWrite()) {
String currentDBPath = "//data//com.example.packagename//databases//" + DB_NAME;
String backupDBPath = DB_NAME;
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if(currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
当然,你还需要<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
之后,您可以使用“DB_NAME”给出的文件名在 SD 中找到您的数据库。
于 2013-08-16T11:18:23.813 回答