How to push sqlite databse to android app by usb cable? [duplicate] - android

This question already has answers here:
Ship an application with a database
(15 answers)
Closed 7 years ago.
I'm generating a sqlite database on my desktop system, this database (file with .db extention) should be pushed to my Android app by USB cable.
Is it possible?
If yes, how?

Short answer on your question is Yes and No.
Yes - if your device is coming with android version 4.3 and below and in every case if your device is rooted. (I will explain procedure below for non-rooted and android <=4.3);
No - if your device is not rooted and android version is 4.4 and higher.
Assuming that your device is not rooted and version of android is 4.3 and minor, you have to perform next actions:
Changing permissions on current db:
adb shell
$ run-as your.package.name
$ cd ./databases/
$ chmod 666 ./dbname.db
$ exit
$ exit
Backing up the original db:
adb pull /data/data/your.package.name/databases/dbname.db /your/path/to/file/on/computer
Replacing current with new database:
adb push /your/path/to/file/on/computer/dbname.db /data/data/your.package.name/databases/dbname.db
Restoring original permissions:
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db #Restore original permissions
$ exit
$ exit
Also, note that you have to adapt paths and file names for your current situation.
If you have rooted phone, then you have to change permissions over su user. If you need that procedure, I can post it, also.

Try this: Using DDMS(Dalvik Debug Monitor Server )

Related

Where does android studio save sqlite db on Linux dev machine?

I'd like to insert data directly into the sqlite database of my app but I cannot find it anywhere on android studio path, even on my root path:
$sudo find / -type f -name 'myapp.db'
I know several similar questions have been asked before but the answers for Windows did not help me on Ubuntu Linux. So appreciate your help.
Android Studio does not store the database locally in your computer. The databases only exist in the devices & every time you deploy to a new device, your database will be created new in that new device. That is why you can't find it in your computer. Here is where the database is located in the device:
/data/data/full_qualified_java_package_name/databases/database_name.db
Now if you would like to insert data directly, you can use the terminal in Android Studio & use ADB to pull the database off the emulator, modify it, and push it back in. Heck I am sure that if you know enough Linux you could probably insert what you need into it without pulling it from the device. Here are some sample commands for the Android Studio terminal for that:
~/Android/Sdk/platform-tools/adb devices
Get the device number, then:
~/Android/Sdk/platform-tools/adb -s emulator-#### pull /data/data/full_qualified_java_package_name/databases/database_name.db <local-filepath>
And to send it back in, it is just:
~/Android/Sdk/platform-tools/adb -s emulator-#### push <local-filepath> /data/data/full_qualified_java_package_name/databases/database_name.db
Example:
~/Android/Sdk/platform-tools/adb -s emulator-5554 pull /data/data/com.danielkaparunakis.stackoverflowquestions/databases/Questiondatabase.db /Users/DanielKaparunakis/Desktop
Additional tip: If you leave the blank when you pull like this:
~/Android/Sdk/platform-tools/adb -s emulator-5554 pull /data/data/com.danielkaparunakis.stackoverflowquestions/databases/Questiondatabase.db
It will automatically pull it to your project's root folder.
It will save it in the internal storage of every device, if you don't have a rooted device it will not allow you to pull it, but, if you are using an emulator you will be able to pull it.
https://developer.android.com/training/basics/data-storage/databases.html
You app's db is only on the device. You can pull it from any connected device – non-rooted physical devices as well. This script pulls it from the first device.
This trick is run-as <package name> which runs a shell the app's directory with full access to the app's data.
Replace $package with your app's package name and replace $db with the name of you app's db.
$ LC_ALL=C adb exec-out run-as $package cat databases/$db >db.sqlite
LC_ALL=C is to avoid some strange locale behavior on some systems.
adb is by default installed by Android Studio to ~/Android/Sdk/platform-tools/adb.
Update
The program 'adb' is currently not installed. To run 'adb' please ask your administrator to install the package 'android-tools-adb'
This is Ubuntu telling you that you can install it from the Ubuntu package manager.
Normally you would already have it as a part of Android Studio.
Update 2
I don't have a script yet for pushing it back since push and run-as don't work together. You would have to do something like this (untested).
$ adb push db.sqlite /sdcard/temp.sqlite
$ cat <<EOF | adb shell
run-as $package
cat /sdcard/temp.sqlite >databases/$db
exit
exit
EOF

Unable to run 'adb root' on a rooted Android phone [duplicate]

This question already has answers here:
adb shell su works but adb root does not
(11 answers)
Closed 5 years ago.
After rooting my device, I need to run adb root and then adb shell so I could then access my applications database. When trying to run adb root I keep getting "adbd cannot run as root in production builds". Why is this? The only other option is to use the Android emulator for testing, but we all know how terrible the emulator is (not really a viable development solution).
I finally found out how to do this! Basically you need to run adb shell first and then while you're in the shell run su, which will switch the shell to run as root!
$: adb shell
$: su
The one problem I still have is that sqlite3 is not installed so the command is not recognized.

How to access sqlite DB on the Xoom?

I have a Nexus One (rooted) and a Xoom (stock, not rooted).
I have developed on my Nexus for quite some time, without any problems. I'm facing one with the Xoom, however, as it is not rooted.
Indeed, I use sqlite databases in my apps, and I would like to debug them using sqlite3 as I do on my Nexus.
It doesn't work!
$ pwd
/
$ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),3001(net_b_admin),3002(net_bt),3003(inet)
$ sqlite3 /data/data/org.bicou.newsreader/databases/subscriptions.db
sqlite3: permission denied
I can't! How come? How am I supposed to develop? I'm sure I'm missing something but I don't know what.
Also, adb pull doesn't want to pull, and cat / cp / mv don't work either. I don't want to write specific code in my app just to browse the DB...
If it is your app you're debugging, there is no need to root the device.
Edit this list of commands to your package name and db file name, and paste it into a shell:
adb wait-for-device shell <<EOF
run-as [YOUR_PNAME]
chmod 666 databases/[YOUR_DB_FILE_NAME].db
exit
exit
EOF
adb pull /data/data/[YOUR_PNAME]/databases/[YOUR_DB_FILE_NAME].db
sqlitebrowser [YOUR_DB_FILE_NAME].db &
The sqlitebrowser can be replaced with whatever sqlite3 application you have on your pc.
I rooted my device as well. But new system image doesn't have sqlite3 in path.
I ended up rooting the device.
(answser input only for marking it as accepted)

How to install or get access to sqlite3 from adb shell

I need a way to install or somehow get access to sqlite3 in the adb shell. I have rooted my device.
I've tried to find an answer but the closed I could come is:
Why do I get a "sqlite3: not found" error on a rooted Nexus One when I try to open a database using the adb shell?
But I don't think it's good idea to push my windows sqlite3.exe on a linux system?
So is it possible to install the sqlite3 terminal browser somehow?
[SOLUTION]
From the different comments and some asking around at #android-dev (irc), I found a solution. First I copied the database file to my desktop. But fist I had to install BusyBox, because cp isn't included?!? After that ran I into the problem that I couldn't pull or push from anywhere but /sdcard/ . I could then use /sdcard/ as a "middle station" and pull/push my db.
Then I got exhausted! I really had to have my sqlite terminal explore. Then I got the idea to start the emulator pull the sqlite binary from /system/xbin/sqlite3. Then remount /system with rw:
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
and push sqlite to the /sdcard/, and from there copy it to /system/xbin/
Now it works :D
Download this app from google play will help you install sqlite3 on android https://play.google.com/store/apps/details?id=ptSoft.util.sqlite3forroot
You don't need root to pull the database from your device. Simply run the following commands:
adb shell run-as <package-name> "cp databases/<db_name>.db /sdcard/ && exit"
adb pull /sdcard/<db_name>.db ~/Downloads/
From there, you can use sqlite3 for whatever operating system you're using (http://www.sqlite.org/download.html), or a sqlite browser such as "DB Browser for SQLite" (http://sqlitebrowser.org/)
I use Rajath's technique... Adb "Pull" the db from the emulator/device, work on it, then adb "push" it back onto/into the emulator device.
also:
I use the free SQLite Editor from the Android Market. I have not rooted my LG Ally and therefor can only edit database tables on my sdcard with SQLite Editor.
Rajath suggests using the adb to push and pull the databases to and from the emulator/device. The work on the database with the windows (or whatever) sqlite3 program you have. He does not suggest pusing the windows sqlite3 onto the Android device, IMHO.
I note that java/android "query()" sends actual SQL commands programmacitacly to ones program with user input. I conclude that sqlite3 is in Android somewhere.
When using the emulator Dev Tools is available, and way down at the bottom of the list is the Terminal Emulator. This allows exploration of file structure of Android in the emulator. However using "adb shell" from the PC has root permissions.
good luck. cactus mitch
You can do this with adb shell without issue.
In terminal or CMD (assuming you have the ADB path set and your phone has ROOT) type:
$ adb shell
$ cd data/data/com.nameofyourpackage/databases/
$ ls to find the name of your database
$ sqlite3 nameofyourdb.db
Then you can use .tables .schema to see the data you need to create the appropriate query.

Access sqlite database on android device [duplicate]

This question already has answers here:
where is my app? /data appears empty
(3 answers)
Closed 8 years ago.
I'm trying to access the sqlite database file on the device. I mean, I've launched the app on the device via adb. And now I wanto to download this file as I did before on emulator via DDMS. But when I select the device on DDMS and open the folder data, it is empty.
Is it the right way to do? Or there is another way to download this db file.
Thanks.
You can access to the data folder without root, provided the application is debuggable
<application
...
android:debuggable="true"
...
To list the base directory :
adb shell "run-as com.your.package ls -l"
To copy a file :
adb shell "run-as com.your.package cat relative/path > /sdcard/some_name"
adb pull /sdcard/some_name
Unfortunately pre-ICS run-as is quite buggy. The usual symptom is a
run-as: Package 'com.your.package' is unknown
message.
Have you tried adb directly?
adb pull /data/data/the.package.of.the.app/databases/the_name_of_the_database.db

Categories

Resources