如何在真实设备中查看我的应用程序的sqlite数据库的内容?

时间:2013-01-04 10:37:35

标签: android sqlite

我希望在我的应用程序中看到我的数据库中创建的数据库内容。我可以在shell中使用sqlite命令并在模拟器中查看,但不能在真实设备中查看。

任何人都可以知道如何在真实设备中执行此操作吗?

5 个答案:

答案 0 :(得分:7)

如果应用程序被标记为可调试,则不需要

root。您可以使用run-as adb命令。

e.g。使用sqlite:

adb shell "run-as com.your.package sqlite3 databases/database_name"

或复制并拉取数据库:

adb shell "run-as com.your.package cat databases/database_name > /sdcard/some_name"
adb pull /sdcard/some_name

不幸的是,ICS前run-as似乎有很多错误,例如:问题2079213965

答案 1 :(得分:2)

实际上真实设备未植根,因此您无权访问 /data/data/<Application>/database/目录。

只有一个解决方案将该文件复制到外部存储 ..并在 SQLiteManager 或任何其他 SQLite 工具中查看。

答案 2 :(得分:1)

我认为你需要一个root设备才能访问sqlite。

看看这个discussion

答案 3 :(得分:0)

试试这个,

您可以将数据库复制到可以查看数据库的SD卡中

   public void backup() {
        try {
            File sdcard = Environment.getExternalStorageDirectory();
            File outputFile = new File(sdcard,
                    "YourDatabase.db");

            if (!outputFile.exists()) 
                 outputFile.createNewFile(); 

            File data = Environment.getDataDirectory();
            File inputFile = new File(data,
                    "data/"+getPackageName()+"/databases/"+"YourDatabase.db");
            InputStream input = new FileInputStream(inputFile);
            OutputStream output = new FileOutputStream(outputFile);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            output.flush();
            output.close();
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
            throw new Error("Copying Failed");
        }
    }

希望它有所帮助。

答案 4 :(得分:0)

尝试此功能

copyFile(new File("data/data/<app>/database"),new File("mnt/sdcard/...."))

public void copyFile(File filesrc, File filedst)
 {
  try
 {
  FileInputStream localFileInputStream = new FileInputStream(filesrc);
  FileOutputStream localFileOutputStream = new FileOutputStream(filedst);
  byte[] arrayOfByte = new byte[1024];
  while (true)
  {
    int i = localFileInputStream.read(arrayOfByte);
    if (i == -1)
    {
      localFileOutputStream.close();
      localFileInputStream.close();
      break;
    }
    localFileOutputStream.write(arrayOfByte, 0, i);
  }
}
catch (Exception localException)
{
  Log.d("XXX", "ExceptioncopyFile:" + localException.getMessage(), localException);
}

}