我需要在我的Android设备中查看数据库,但由于它是一个非root用户设备,我无法这样做。我在DBAdapter类中实现了以下代码,并在另一个活动中调用它。
代码:
void exportDB() {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "//data//" + "com.example.facebook_integration"
+ "//databases//" + "image_database.db";
String backupDBPath = "//sdcard//FBDatabase";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
//Toast.makeText(getApplicationContext(), "Backup Successful!",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
//Toast.makeText(getApplicationContext(), "Backup Failed!", Toast.LENGTH_SHORT).show();
}
}
但上面的代码似乎不起作用。我已经在Stackoverflow中很好地浏览了这个问题(有一些安静)并且还尝试了adb命令,但它们都没有用。您能否告诉我上述代码出错的地方或上述解决方案的替代方案?帮助将非常感谢伙计们。
答案 0 :(得分:2)
您可以将数据库转储到SD卡中,然后打开SQLite数据库工具的SQLite管理器:
File f=new File("/data/data/yourapppackagename/databases/database");
FileInputStream fis=null;
FileOutputStream fos=null;
try
{
fis=new FileInputStream(f);
fos=new FileOutputStream("/mnt/sdcard/folder/database.db");
while(true)
{
int i=fis.read();
if(i!=-1)
{fos.write(i);}
else
{break;}
}
fos.flush();
Toast.makeText(getParent(), "DB dump OK", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
e.printStackTrace();
Toast.makeText(getParent(), "DB dump ERROR", Toast.LENGTH_LONG).show();
}
finally
{
try
{
fos.close();
fis.close();
}
catch(Exception ioe)
{}
}
答案 1 :(得分:2)
您只需选择数据库文件,然后导出到您的系统中。
答案 2 :(得分:1)
您没有获得输出,因为您的文件backupDB实际上不存在。 文件backupDB =新文件(sd,backupDBPath); - 这只会创建一个逻辑文件对象,它可能不是物理存在的。所以你应该打电话,
backupDB.createNewFile();
以物理方式创建文件。