i can access the my sqlite db using adb shell commands in my emulator. But can not do the same for my HTC Desire phone. it throws some permission denied messages. is there any possible to access those database for debugging purpose. Any Idea?
Thanks in Advance.
You can also type the following in to the command prompt/terminal
If your app package was com.example.dbtest and the database was called sqlite.db
adb shell
run-as com.example.dbtest
cat databases/sqlite.db > /sdcard/sqlite.db
exit
exit
adb pull /sdcard/sqlite.db /path/to/place/file
(if you leave the last parameter blank, it will be placed in the same directory as adb)
This does not require root and be scripted to remove any file from your apps.
You could also use a stream reader and writer to copy it to the sdcard. Do not copy it row by row as barmaley suggested as this may mask errors.
I can see only 2 options:
Get root access to your device
Write special procedure, which will copy your database to SD card (just record by record using SQLite API)
you dont need to rootor export you db . you can manage you android database directly from your apps using the below library
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
Related
Is it possible to get the raw data file in my Samsung phone?
Like I have a sample app, and this app saved data to the database in my phone. Now I want to get that raw data, but don't know where it's located.
Thanks
RJ
To access a database from an app directly on your phone you can use the platform tools that come with the Android SDK, specifically adb and sqlite3.
For example, if you know what your application package is called, such as com.sample.app, you should be able to find more information about the database. First, locate your platform-tools folder in your Android SDK folder, then open up a shell to your phone with the command:
adb shell
This will allow you to view your phone through the command line. The databases should be stored in the folder /data/data, so you should be able to navigate to your specific database by typing:
cd /data/data/com.sample.app
Within this directory should be a databases directory, navigate into that directory using
cd databases
Now from within this directory you should be able to access all the databases used by the app. Specifically, if your database is named mydatabase, you should then be able to begin accessing it and viewing it with the command:
sqlite3 mydatabase
From there you can learn more about your database such as the different tables, currently stored data, etc. For more help within the tool type .help
You can find more information about the tool here: http://developer.android.com/tools/help/sqlite3.html
And a brief tutorial here: http://www.vogella.com/articles/AndroidSQLite/article.html#sqlite_commnandline
Another way would be to pull the database from the device and browse it with a sqlite client on your pc:
For this you need the adb pull tool that takes a source path and a target path as parameters:
adb pull /data/data/com.yourdomain.yourapp/databases/yourdatabase.db c:\users\yourfolder
Then you can use e.g. SQLite Database Browser or any other sqlite client.
ALL,
I wrote a simple android app that uses database.
When I execute it everything is OK. However when I switch the phone to mount mode I can't find the actual *.db file.
I am trying to execute following:
cd /media/
find . -name *.db
I also tried to search for the database file without success.
After playing a little with SQLite database browser I know that I need to save the file after creation.
Is there such a function in Android API?
Thank you.
If your app uses a database, it will be placed in the /data/data/<your-apps-package-name>/databases directory on your phone. To see it on the phone, I believe you need root privileges.
You should be able to pull the database locally to a connected machine which has adb installed on it. Or you can use ddms with Eclipse to pull the data to your machine.
How can I browse the SQLite database that I am creating in my app on my Android myTouch phone?
When I log in through adb shell, sqlite3 gives me a permission denied. Is there another way to check if my database and tables are actually being created, and if rows are being inserted?
I am not able to use the emulator, since it doesn't play videos etc. very well that is the main feature of my app, so I can only test on phone.
The entire database is a single file, so via the DDMS view in Eclipse or via the command line you can pull that file from the phone. You can then use SQLite DataBase Browser to view the contents, for example.
Using this library you can browse your SQLite database directly from your application
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
Is there a way for an Android user to browse the SQLite databases on his/her phone and view the data in the databases?
I use the SoftTrace beta program a lot. It's great but has no way that I can find to download the data it tracks to a PC.
The database for a specific app lives in /data/data/[packagename]/databases
The packagename is the package you define in your manifest, for instance /data/data/org.vimtips.supacount/databases/counts.db.
You can view it with adb shell and type sqlite3 /data/data/org.vimtips.supacount/databases/counts.db
Or you can pull it from the device to look at it with a third party utility, with a command like adb pull /data/data/org.vimtips.supacount/databases/counts.db ..
This assumes you have permission to view the database, which you might not have if you didn't write the app yourself... but in that case, is it actually a programming question?
If you are using Eclipse, you can use a plugin called 'Questoid SQLite Browser' to browse the SQL Lite Database on your Android emulator:
Install the plugin
Restart eclipse
Start your emulator
Switch to DDMS
Open database with plugin (as #synic mentioned previously, the DB is located here e.g. /data/data/my_project/databases)
Here is a more detailed tutorial: http://www.tylerfrankenstein.com/browse-android-emulator-sqlite-database-eclipse
Here is the free method that worked for me on a phone that is not rooted. Credit goes to this SO answer.
Use adb backup -f backup.ab -noapk app.package.name
On Windows download the Android Backup Extractor jar found on SourceForge here, then run java -jar abe.jar unpack backup.ab extractedbackup.tar. On Linux you can follow the dd instructions from the answer I gave credit to in the beginning.
Download SQLite Database Browser from SourceForge here, then open the db file contained within extractedbackup.tar.
Personally, to make this process easier, I first added adb to my environment PATH. Then I made a backup folder where I store all of the files mentioned above. This keeps me from having to cd (change directory) all over the place.
The Questoid plugin appears to cost $9 and requires registering. Another alternative on Windows is to download the open-source public-domain SQLLite Browser (link below) and then pull the database from the phone. In Eclipse you can do this from the File Browser, going to the /data/data/[packagename]/databases directory on the phone or emulator, and clicking "Pull a File From The Device" in the top right. Save the database locally, then open with the SQLite Browser.
http://sourceforge.net/projects/sqlitedbrowser/
Actually the most available (yet still hacky) way of getting "live" results from a database while developing on emulator that I found is this:
Create a script to pull the database from emulator, something like this
#!/bin/bash
ANDROID_HOME=/path/to/sdk
ADB=$ANDROID_HOME/platform-tools/adb
REMOTE_DB_PATH=/data/data/com.yourpackage.name/databases/your_db
LOCAL_DB_PATH=.
while true; do
echo copying DB...
`$ADB pull $REMOTE_DB_PATH $LOCAL_DB_PATH`
sleep 3
done
Run it.
Install SQLite Manager plugin for Firefox
Open your local copy of the database (which is constantly overridden by the running script from step 1)
Enter your SQL:
Select File->Reconnect
Click Run SQL
The key trick is that reconnecting does not reset SQL entered on step 4 (as it does, for example, in SQLite Browser), so you can repeat steps 5,6 to see "live" results from your android database.
Note that this only works for emulator, it won't work for a real device (even a rooted one).
You can view you database from your app using this library . https://github.com/sanathp/DatabaseManager_For_Android
With this library you can manage your app SQLite database from you app itself.
you can view the tables in your app database , update ,delete, insert rows to your tables
Its a single java activity file ,just add the java file to your source folder.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
If you were lucky enough to get IntelliJ Ultimate then you can plug the device in, open 'Database' tab on the right, click +, select SQLite. The rest is trivial.
One thing to keep in mind with it is that you have to keep clicking "Synchronize" button on the database (or on selected table) to see the changes made externally, which is very annoying.
See this answer. You can use Stetho library from Facebook and then just browser you database from Chrome :)
This question already has answers here:
Debugging sqlite database on the device
(17 answers)
Closed 5 years ago.
I am having trouble accessing the database while I am developing on the phone. Whenever I execute
cd /data/data/com.mycompck/databases
and then run ls I get: "opendir failed, Permission denied"
Or whenever I type in sqlite3 I get: "sqlite3: permission denied"
What am I doing wrong?
Are there some applications that can help me getting a human view of content resolvers values and/or SQLite databases?
Check my answer from the following thread: Why do I get access denied to data folder when using adb?
Starting from API level 8 (Android 2.2), if you build the application as debuggable, you can use the shell run-as command to run a command or executable as a
specific user/application or just switch to the UID of your
application so you can access its data directory.
So basically you will need to make a debug build (which is made automatically whenever you launch the application from the Android Studio unless you request the release build) and run the following commands:
run-as com.mycompck
cd /data/data/com.mycompck/databases
ls
sqlite3 ./yourdatabase.db
However note that sqlite3 binary is not present by default on many phones. Thus you will perhaps need to download it somewhere (e.g. from SuperOneClick archives at http://shortfuse.org/), save on the SD card and make it executable (which is a little bit tricky though), for example:
run-as com.mycompck
cd /data/data/com.mycompck/
cat /sdcard/sqlite3 >./sqlite3
chmod 744 ./sqlite3
./sqlite3 ./databases/yourdatabase.db
To answer the first part of your question, check out this answer. Basically, your phone needs to have root access, and you need to run adb in root mode (using "adb root").
As for the second part, I use SQLite Database Browser to view my SQLite dbs (though that's only when the db is on my computer; don't know of any on-device browsers). I don't know of any way to get a human view of content resolvers.
You have to be root to access any database file. So, you can either get root on your phone (look for information on Google) or debugging the database just from the emulator (wich gives you root access always).
Bye!
The best way to view and manage your android app database is to use this library 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
I've read up on this a little and accessing your database files for mobile seems quite of a hassle.
Take a look at this. with this you can view your database inside of your application. Database Manager
For me this worked fine. It kind of also depends on what you're planning to do ofcourse.
Hope it helps.