我需要在我的 android 设备中查看数据库,但由于它是一个未 root 的设备,我无法这样做。我在我的 DBAdapter 类中实现了以下代码,并在另一个 Activity 中调用它。
代码:
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 命令但它们都没有用。你能告诉我上面的代码哪里出了问题或者上面的解决方案的替代方法吗?帮助将不胜感激伙计们。
最佳答案
您可以将数据库转储到 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)
{}
}
关于android - 如何查看 Android 设备中的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737774/