Bijesh
Bijesh

Reputation: 357

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

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.

Can anyone know how to do it in real device?

Upvotes: 4

Views: 3790

Answers (5)

Philippe Banwarth
Philippe Banwarth

Reputation: 17755

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

Upvotes: 7

sandy
sandy

Reputation: 3351

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

}

Upvotes: 0

vinothp
vinothp

Reputation: 10079

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.

Upvotes: 0

Michal
Michal

Reputation: 2084

I think you need a rooted device to access sqlite.

Look at this discussion.

Upvotes: 1

user370305
user370305

Reputation: 109257

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.

Upvotes: 2

Related Questions