How can I see the contents of a sqlite db of my app in a real device?

后端 未结 5 564
迷失自我
迷失自我 2021-01-06 04:39

I want to see the contents of my database created in my app in the device I deploied it. I can use sqlite commands in shell and see in emulator but not in a real device.

相关标签:
5条回答
  • 2021-01-06 04:56

    I think you need a rooted device to access sqlite.

    Look at this discussion.

    0 讨论(0)
  • 2021-01-06 05:07

    root is not necessary if the application is flagged a debuggable. You can use the run-as adb command.

    e.g. to use sqlite :

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

    or copy and pull the database :

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

    unfortunately it seems that pre-ICS run-as has quite a few bugs, e.g. issue 20792 or 13965

    0 讨论(0)
  • 2021-01-06 05:09

    Try this,

    You can copy your database in to your sdcard where you can see your database

       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");
            }
        }
    

    Hope it helps.

    0 讨论(0)
  • 2021-01-06 05:13

    Actually your Real Device is not Rooted so you don't have a permission to access /data/data/<Application>/database/ directory.

    Only one solution copy that file to external Storage .. And see it in SQLiteManager or any other SQLite tools.

    0 讨论(0)
  • 2021-01-06 05:15

    Try this function as

    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);
    }
    

    }

    0 讨论(0)
提交回复
热议问题