6

Android saved settings in a database file which is /data/data/com.android.providers.settings/databases/settings.db.

Android use sqlite3 as the database. We can use adb to manage the database file. I want to know if there is a way to run all these commands in a perl/python script to automate the whole query process?

$adb shell 
$sqlite3 /data/data/com.android.providers.settings/databases/settings.db 

The above command will open the settings database. Then you will enter into sqlite3 command line.

First check how many tables existed in the database. Here lists the result.

sqlite> .tables

android_metadata   bookmarks          gservices        
bluetooth_devices  favorites          system  

The settings (such as volume_alarm) I want to get are in "system" table, a .dump command will list all items in the table.

sqlite> .dump system
BEGIN TRANSACTION;
CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);
INSERT INTO "system" VALUES(3,’volume_system’,’5′);
INSERT INTO "system" VALUES(4,’volume_voice’,’4′);
INSERT INTO "system" VALUES(5,’volume_alarm’,’6′);
.....
$ select value from system where name ='volume_alarm';
select value from system where name ='volume_alarm'
6
$.quit;
2
  • yes, you can. search.cpan.org/~msergeant/DBD-SQLite-0.31/lib/DBD/SQLite.pm Commented May 31, 2013 at 7:23
  • @mpapec, he wants to use perl/python on PC to query database on the device. the sqlite perl module is not going to help unless he would pull the database file to PC. Commented May 31, 2013 at 7:30

3 Answers 3

12

To query a specific value:

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "select value from 'system' where name = 'volume_alarm';"

Or to pull all records from a table:

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "select name, value from 'system';"
Sign up to request clarification or add additional context in comments.

3 Comments

@Alex I have the same question with you, and when I enter the command above, there is an error: sqlite3: Error: too many options: "acct", Do you know how to resolve it ? And do you have any suggestion on this issue that use a script to query android sqlite3? hope your reply,thanks.
@Ying.Zhao you ned to quote the query like this: adb shell sqlite3 /path/file.db '"select * form table;"'
slightly modifying this worked for me, try my answer below
0

this one works.

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "\"select name, value from 'system';\""

Comments

0

Alex P's answer didn't quite work for me but this does:

To query a specific value

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "\"select value from 'system' where name = 'volume_alarm';\""

Or to pull all records from a table:

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db "\"select name, value from 'system';\""

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.