android的系统数据库在调用的时候都封装了 我们只需要写where的condition,表结构和标明对我们都是不透明的 这就对深入了解带来了很多麻烦,即使有源码查看起来也很费劲。
android使用的是sqlite数据库,一般都是每个模块都有一个.db文件,我们可以将系统里的.db文件拷出来在使用android tool中的sqlite3命令来操作和测试数据库。
首先启动模拟器或将手机连接电脑
使用find命令将系统中所有的db文件找出来
adb shell find / -name '*.db' -type f /mnt/sdcard/openfeint/webui/manifest.db /mnt/sdcard/dbms/DBMS.db /data/system/accounts.db /data/data/com.android.vending/databases/assets14.db /data/data/com.android.vending/databases/suggestions.db /data/data/com.android.vending/databases/webviewCache.db /data/data/com.android.vending/databases/webview.db /data/data/com.android.vending/databases/billing4.db /data/data/com.android.providers.userdictionary/databases/user_dict.db /data/data/com.android.providers.telephony/databases/mmssms.db /data/data/com.android.providers.telephony/databases/telephony.db /data/data/com.android.providers.settings/databases/settings.db /data/data/com.android.providers.media/databases/internal.db /data/data/com.android.providers.media/databases/external-bd717cb2.db /data/data/com.android.providers.media/databases/external-5c2507fe.db /data/data/com.android.launcher/databases/launcher.db /data/data/com.example.android.apis/databases/webviewCache.db /data/data/com.example.android.apis/databases/webview.db /data/data/com.eclipsim.gpsstatus2/databases/google_analytics.db /data/data/com.eclipsim.gpsstatus2/databases/webviewCache.db /data/data/com.eclipsim.gpsstatus2/databases/webview.db /data/data/com.android.inputmethod.latin/databases/userbigram_dict.db /data/data/com.android.inputmethod.latin/databases/auto_dict.db /data/data/com.google.android.gsf/databases/talk.db /data/data/com.google.android.gsf/databases/webviewCache.db /data/data/com.google.android.gsf/databases/webview.db /data/data/com.google.android.gsf/databases/googlesettings.db /data/data/com.google.android.gsf/databases/subscribedfeeds.db /data/data/com.google.android.gsf/databases/gservices.db /data/data/com.google.android.gsf/databases/gls.db /data/data/com.google.android.googlequicksearchbox/databases/qsb-log.db /data/data/com.google.android.gm/databases/downloads.db /data/data/com.google.android.gm/databases/[email protected] /data/data/com.google.android.gm/databases/gmail.db /data/data/com.google.android.apps.genie.geniewidget/databases/weather.db /data/data/com.cooliris.media/databases/launcher.db /data/data/com.cooliris.media/databases/picasa.db /data/data/com.android.email/databases/EmailProviderBody.db /data/data/com.android.email/databases/EmailProvider.db /data/data/com.android.providers.drm/databases/drm.db /data/data/com.getsetgames.megajump/databases/google_analytics.db /data/data/com.getsetgames.megajump/databases/webviewCache.db /data/data/com.getsetgames.megajump/databases/webview.db /data/data/com.android.providers.downloads/databases/downloads.db /data/data/com.rich.webviewtest/databases/webviewCache.db /data/data/com.rich.webviewtest/databases/webview.db /data/data/com.android.deskclock/databases/alarms.db /data/data/com.android.providers.contacts/databases/contacts2.db /data/data/com.android.providers.calendar/databases/calendar.db /data/data/com.android.browser/app_icons/WebpageIcons.db /data/data/com.android.browser/app_geolocation/CachedGeoposition.db /data/data/com.android.browser/app_databases/Databases.db /data/data/com.android.browser/app_appcache/ApplicationCache.db /data/data/com.android.browser/databases/browser.db /data/data/com.android.browser/databases/webviewCache.db /data/data/com.android.browser/databases/webview.db /data/data/com.android.bluetooth/databases/btopp.db
有了个db文件列表我们就可以把这些db 复制到电脑上进行操作了
以通讯录数据库为例执行以下操作:
adb pull /data/data/com.android.providers.contacts/databases/contacts2.db F:/androidres/systemdb --1669 KB/s (271360 bytes in 0.158s)
F:/androidres/systemdb为任意本地目录 不明白pull命令的查看adb help
用sqlite3打开这个文件
F:/androidres/systemdb>sqlite3 contacts2.db SQLite version 3.6.22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables _sync_state settings _sync_state_metadata status_updates accounts v1_settings activities view_contacts agg_exceptions view_contacts_restricted android_metadata view_data calls view_data_restricted contact_entities_view view_groups contact_entities_view_restricted view_raw_contacts contacts view_raw_contacts_restricted data view_v1_contact_methods groups view_v1_extensions mimetypes view_v1_group_membership name_lookup view_v1_groups nickname_lookup view_v1_organizations packages view_v1_people phone_lookup view_v1_phones properties view_v1_photos raw_contacts
sqlite> .schema contacts CREATE TABLE contacts (_id INTEGER PRIMARY KEY AUTOINCREMENT,name_raw_contact_id INTEGER REFERENCES raw_contacts(_id),photo_id INTEGER REFERENCES data(_id),cust om_ringtone TEXT,send_to_voicemail INTEGER NOT NULL DEFAULT 0,times_contacted IN TEGER NOT NULL DEFAULT 0,last_time_contacted INTEGER,starred INTEGER NOT NULL DE FAULT 0,in_visible_group INTEGER NOT NULL DEFAULT 1,has_phone_number INTEGER NOT NULL DEFAULT 0,lookup TEXT,status_update_id INTEGER REFERENCES data(_id),single _is_restricted INTEGER NOT NULL DEFAULT 0); CREATE INDEX contacts_has_phone_index ON contacts (has_phone_number); CREATE INDEX contacts_name_raw_contact_id_index ON contacts (name_raw_contact_id ); CREATE INDEX contacts_restricted_index ON contacts (single_is_restricted); CREATE INDEX contacts_visible_index ON contacts (in_visible_group);