How to export SQLite database the right way - android

So I was reading quite a lot, but still don't understand how to do it. In the location where app database suppose to be located there is three files instead of one .db it has now .db .db-shm and .db-wal so how do I export this database as one file with all its data? Because as far as I understand now all data is located in file .db-wal.
So far I tried to close all connections to database before exporting because in SQL documentation it says that it .db-wal will be merged, but still same scenario

This is how I do it (on an ubuntu machine):
Locate adb file in Android/Sdk/platform-tools/
Open command line in this directory
Run the following code, to pull Sqlite database from app to SD card:
./adb -d shell "run-as com.example.name.myappname cp /data/data/com.example.name.myappname /databases/database.db /sdcard/database.db"
*Make sure to replace "database.db" and "com.example.name.myappname", by your databasename and app name (found in your manifest).
Run the following code, to pull the Sqlite data from SD card to desktop:
./adb -d pull /sdcard/database.db ~/Desktop/database.db
If you want to load your app with this database, I recommend using SQLiteAssetHelper.

Related

How to view sqlite database using real device

I've been searching this for quite a long time and I found the following steps at https://stackoverflow.com/a/24259250/5256621
1.Connect your device and launch the application in debug mode.
2.Copy the database file from your application folder to your sd card:
execute:
./adb -d shell "run-as com.yourpackge.name cat
/data/data/com.yourpackge.name/databases/filename.sqlite >
/sdcard/filename.sqlite"
Pull the database files to your machine: execute:
./adb pull /sdcard/ execute: ./adb
Install Firefox SQLLite Manager:
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
5.Open Firefox SQLLite Manager and open your database file from step 3
above.
Where can I find my database file ? The data file shows empty although I have rooted my device. I'm sorry if this is a silly question but I really do not know how to access SQLite using real device.
Some said that database can be accessed once the device is rooted but not works for me. How do I view the SQLite database on an Android device?
you can user Root Explore,before this,you must root your device and user root permission to run the app ,then open and find data folder and open the folder then continue find data folder and open ,you will find the app files in this device,find your packagename and you can find the db,you can use copy the db to sdcard

How to extract sqlite database from android device using ADB? [duplicate]

This question already has answers here:
Retrieve database or any other file from the Internal Storage using run-as
(12 answers)
Closed 4 years ago.
I followed the step by step instructions given in the answer of How do I view the SQLite database on an Android device?
1) Connect your device and launch the application in debug mode.
2) Copy the database file from your application folder to your sd
card. You may want to use adb -d shell "run-as com.resmed.mon ls
/data/data/com.resmed.mon/databases/" to see what the database
filename is.
3) adb -d shell "run-as com.yourpackge.name cat
/data/data/com.yourpackge.name/databases/filename.sqlite >
/sdcard/filename.sqlite"
(in my case "/data/data/com.mypackge.name/databases/MyDb")
4) Pull the database files to your machine:
5) adb pull /sdcard/filename.sqlite .
6) Install Firefox SQLLite Manager:
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
7) Open Firefox SQLLite Manager (Tools->SQLite Manager) and open your
database file from step 3 above."
But in my case, the database extracted is always empty. When i open the file on SQL Lite Manager, i can't find my tables and my data. I don't understand why. I can see the data on my device screen using my app in debug mode. Is there an other folder where my database could be stored ?
My phone is not rooted.
Thanks for your help.
PS : I wanted to comment on the previous answer, but my reputation is too low to interact with the answer.
I've published a simple shell script for dumping databases:
https://github.com/Pixplicity/dbdump
It performs two distinct methods described here:
First, it tries to make the file accessible for other users, and attempting to pull it from the device.
If that fails, it streams the contents of the file over the terminal to the local machine. It performs an additional trick to remove \r characters that some devices output to the shell.
From here you can use a variety of CLI or GUI SQLite applications, such as sqlite3 or sqlitebrowser, to browse the contents of the database.
As far as I remember, you shouldn't be able to extract a database from un-rooted device. You can however get it from an emulator!

View SQLite DB on Android device

ALL,
I have an Eclipse Kepler where I am developing my Android application. This application uses SQLite for data persistence.
What I'd like to do is to see the database/tables/data inside Eclipse.Following this I opened installed the plugin, then opened File Explorer.
Problem is: trying to open /data is unsuccessful. It does not open.
Do I have to root the device to open this directory? I have LG phone with Android 2.2.
Permission sets for this folder is drwxrwx--x.
Thank you.
[EDIT]
I also tried to run the shell
igor#IgorReinCloud ~ $ android_sdk/platform-tools/adb -d shell
$ sqlite3 /data/data/com.radar.radar/databases/friends.db
sqlite3: permission denied
$
So it actually means that this is a permission issue and therefor I will not be able to see the db.
[/EDIT]
you can try
$ adb -d shell
$ run-as [your-package-name]
This should allow you to run commands as the user for that package. No guarantees though. Also, I've found that not all devices appear to have sqlite3 available through the shell.
Another possibility is to do the run-as command as above, then copy the database file to /sdcard, whcih is public. Then you can do adb pull /sdcard/[database-file]. Then you'll have the file on your local machine and can use sqlite3 there.
Using this simple library you can directly view your SQLlite datbase from your app . no need to extra .db file
https://github.com/sanathp/DatabaseManager_For_Android
Its a single java activity file ,just add the java file to your source folder you can view the tables in your app database , update ,delete, insert rows to you table .Everything from your app.
When the development is done remove the java file from your src folder thats it .
It helped me a lot .Hope it helps you too .
You can view the 1 minute demo here : http://youtu.be/P5vpaGoBlBY

Getting SQLite database from emulator (data/data/package_name/databases) to local drive

I would like to edit my app's DB using the SQLite Browser. I'm able to edit the DB using the adb shell (sqlite3), but I would rather edit it using a GUI rather than a command line. How do I get the DB from the emulator to a local drive? As of now I've tried:
1) using the adb pull command to pull the database from the emulator to my local drive.
adb pull data/data/com.myapps.quiz c:/
This command executes correctly, but I'm not able to find the file or directory in the local drive I specified.
2) Used the DDMS Perspective to locate the file in the File Explorer, but every time I get into the data/data directory, I only see directories called "con". I even tried pulling the entire data/data directory, but I can't find the name of the package (com.myapps.quiz) where the database is stored.
What am I missing here? Any help you could provide would be most helpful!
Your database is secure to your package so you cannot get this directly.
I have a work around for this.
What I do is go to shell and run-as my package and copy the database to sdcard using cat
adb shell
run-as your.package.name
cd databases
cat your_database.db > /mnt/sdcard/your_database.db
And I pull the file from the sdcard using File Explorer
Are you sure you're connecting to the emulator instance in DDMS, and not an actual device? I have always been able to push and pull sqlite databases from the
data/data/com.my.package/databases/mydb.sqlite
directory, and I can't think of any setting that would override that. An alternative would be to root an actual phone and then you will be able to move anything from the phone to your computer.

Inspecting android sql database from Eclipse

Is there a way to directly inspect an SQLite3 database in Android via Eclipse or do I have to do this via the shell?
I don't know if you can inspect it from within eclipse but you can pull a copy of the database file from the DDMS perspective in the file explorer in folder
data->data->your.package.name->databases
which you can inspect with a free database manager such as sqlite studio
Unfortunately AFAIK you always have to use the shell currently. (Well, not quite. You can use DDMS in Eclipse to pull the database, but that's not much better than using the shell).
Basically you can either 1) pull the database file from the emulator / phone and then inspect it, or you can 2) manually run some SQL queries from inside the emulator/phone.
For 1, I would recommend creating a script. Here is simple example
$ cat android_pull_db
#!sh
adb shell "chmod 777 /data/data/com.mypackage/databases/store.db"
adb pull /data/data/com.mypackage/databases/store.db
$
To create your own, paste the lines from #!... down to adb pull ... into a text file, and save it somewhere. Modify the package location and database filename. Make it executable, and add it to your path.
For 2, just execute this:
$ adb shell
$ cd /data/data/com.yourpackage/databases
$ sqlite3 your-db-file.db
> .help
http://sqlitebrowser.sourceforge.net/index.html
This is a simple way of inspecting the contents of a database. Just use the DDMS to pull the database from the device and then open.
https://github.com/cattaka/TelnetSqlite/wiki
I made it this by following 3 step.
Embed a small program
Add code to kick the embedded program in the Application.onCreate() method
Execute the telnet and run SQL via small program
But it is not from Eclipse. It uses telnet or a sql editor named RdbAssistant.

Categories

Resources