android 联系数据库
聯系人數據庫學習
2011-10-31(這是android2.3在接觸db)
?
簡單介紹
???????? Android中聯系人的信息都是存儲在一個叫contacts2.db的數據庫中。該數據庫的路徑是:/data/data/com.android.provider.contacts/databases/contacts2.db。如圖1:
我們能夠在cmd中通過adb命令把該文件拉出來(詳細口令為:adb? pull/data/data/com.android.provider.contacts/databases/contacts2.db 要存放的路徑\自己定義名字.db), 能夠使用SQLiteSpy工具來查看該數據庫。
如圖2:
???????? ContactsContract.java這個類就是去解釋和翻譯這個contacts2.db數據庫的。
全部的聯系人Uri,與聯系人相關數據庫字段均在此定義。
這個類中有非常多的內部接口和內部類,用來翻譯一些表,比如Data內部類,RawContacts內部類等。
???????? 通信錄是一個3層的數據存儲模型,這三個數據模型就是ContactsContact.Data。ContactsContact.RawContacts,ContactsContact.Contacts。
相應三個表:data、raw_contacts、contacts。
1) contacts表
???????? 表保存了全部的手機測聯系人。每一個聯系人占一行。該表保存了聯系人的ContactID、聯系次數、最后一次聯系的時間、是否含有號碼、是否被加入到收藏夾等信息。contacts是由raw contacts經過整合而來的,一個contacts能夠由一個或多個raw contacts組合而成。
2、raw_contacts表
???????? 表保存了全部創建過的手機聯系人,每一個聯系人占一行,表里有一列標識該聯系人是否被刪除。該表保存了兩個ID: RawContactID和ContactID,從而將contacts表和raw_contacts表聯系起來。
該表保存了聯系人的RawContactID 、ContactID、聯系次數、最后一次聯系的時間、是否被加入到收藏夾、顯示的名字、用于排序的漢語拼音等信息。
?3、data表
???????? 表保存了全部創建過的手機聯系人的全部信息,每一個字段占一行,該表保存了兩個ID: MimeTypeID和RawContactID,從而將data表和raw_contacts表聯系起來。
聯系人的全部信息保存在列data1至data15中,各列中保存的內容依據MimeTypeID的不同而不同。
聯系人數據庫contact2.db中的表
data表
ContactsContact.Data
?
| _id | 行id |
| package_id | ? |
| mimetype_id | 當前行保存的mimetype類型的id。1為郵箱。2聊天賬號。3住址;4圖片;5電話號碼。6姓名。7公司+職位;8昵稱;9所屬組;10備注;11網址 |
| raw_contact_id | raw_contacts表的_id |
| is_primary | 是否是它屬于的raw_contacts的primary entry,“1”true。“0”false |
| is_super_primary | ? |
| data_version | 數據記錄的版本號。每當數據行更改版本號上升。這個值是單調遞增的。 |
| data1 到data15 | 通用數據列(保存著聯系人的信息,聯系人名稱、聯系人電話號碼、電子郵件、備注等)。各列的含義是由mimetype_id的類型確定的。data15用于存儲的BLOB(二進制數據)(存儲圖片)。 |
| data_sync1 到 data_sync4 | 同步適配器使用的通用列。比如,照片行能夠存儲圖像的URL在SYNC1,狀態(不載入,載入,載入錯誤)在SYNC2,server端的版本在SYNC3和錯誤代碼在SYNC4。 |
?
contacts表
ContactsContact.Contacts
?
| _id | 行id,建議用LOOKUP_KEY取代 |
| name_raw_contact_id | raw_contacts表的_id |
| photo_id | 是否含有圖片。引用data表的 _id。在data_id含有對應的mime_type_id, 依據mime_type_id的CONTENT_ITEM_TYPE?????? 查圖片 |
| custom_ringtone | 與聯系人相關的鈴聲 |
| send_to_voicemail | 指示器,推斷是否來自此聯系人的電話是否發送到語音信箱(1)或(0)。 當是多個raw_contacts聚合時,這一領域的自己主動計算:假設全部聚合的raw_contacts 都設置SEND_TO_VOICEMAIL=1,那么這個字段設置為'1'。 設置此字段,會自己主動更改全部聚合的raw_contacts的對應的字段。 |
| times_contacted | 與該聯系人聯系的次數 |
| last_time_contacted | 上次聯系的時間 |
| statrred | 是否是經常使用聯系人;是(1),否(0) |
| in_visible_group | 這個聯系人在UI中是否可見; 是(1),否(0) |
| has_phone_number | 該聯系人否至少有一個手機號碼; 是(1),否(0) |
| lookup | 一個不透明的值(是一個持久化的儲存),提示怎樣找到特定聯系的值(假設因同步或聚集而改變其行ID的值) |
| status_update_id | ? |
| single_is_restricted | ? |
?
raw_contacts表
???????? ?ContactsContract.RawContacts
| _id | 行id 。 同步適配器應盡量在更新過程中的維護行ID。換句話說,同步適配器更新的一個raw_contact,而不是刪除并又一次插入會是更好的。 |
| is_restricted | ? |
| account_name | 指明該聯系人是從哪個賬戶上同步下載下來的。 |
| account_type | 帳戶的類型 |
| source_id | 此行賬戶的類型的獨特的標示。通常它在raw contact是插入時建立,事后從未改變。一個值得注意的例外是一個新的raw contact:將有一個帳戶名和類型。但沒有source id。 這表明同步適配器須要創建一個新的聯系人的在server端和把它的ID存儲在手機上對應的SOURCE_ID字段。 |
| version | 版本號;當列或相關數據改動時,將會自己主動改動 |
| dirty | 版本號發生改變的標記; (此行須要將其擁有的帳戶同步,當raw contact發生改變時,自己主動設為1(除 URI has the CALLER_IS_SYNCADAPTER外)。同步適配器應始終提供查詢參數,以防止不必要的同步:用戶改變server上的一些數據。同步適配器更新手機上的聯系人(無CALLER_IS_SYNCADAPTER標志)標志。當設置dirty標志。從而觸發同步,同步變化到server) |
| delete | 刪除標記;0 or 1;1 表示標記為被刪除。 |
| contact_id | contacts 表中的_id。通過聚合的過程raw contacts 被鏈接到contact,它被AGGREGATION_MODE字段和ContactsContract.AggregationExceptions控制。 |
| aggregation_mode | 聚合模式。值為AGGREGATION_MODE_DEFAULT, AGGREGATION_MODE_DISABLED 或AGGREGATION_MODE_SUSPENDED. |
| aggregation_needed | 0或者1 |
| custom_rington | 與該記錄相關的手機鈴聲 |
| send_to_voicemail | 指示器,推斷來自此聯系人的電話是否發送到語音信箱(1)或(0)。當是多個raw_contacts聚合時,這一領域的自己主動計算:假設全部聚合的raw_contacts 都設置SEND_TO_VOICEMAIL=1。那么這個字段設置為'1'。 設置此字段,會自己主動更改全部聚合的raw_contacts的對應的字段。 |
| times_contacted | 與該聯系人聯系的次數 |
| last_time_contacted | 上次聯系的時間 |
| statrred | 是否是經常使用聯系人;是(1)。否(0) |
| display_name | 聯系人顯示名稱(它可能是電子郵件地址,假設聯系人顯示名稱是不可用) |
| display_name_alt | 聯系人顯示名稱的替代表示,如西方名字“名在前”而不是 “姓在前”。 |
| display_name_source | 作為聯系人的顯示名稱使用的數據類型,如結構化姓名或電子郵件地址。 |
| phonetic_name | ? |
| phonetic_name_style | ? |
| soft_key | 排序的關鍵。考慮賬戶中語言環境,按地址簿中的顯示名稱進行排序。 相應display_name (姓名拆分加拼音:如“墨跡”。則為“MO墨JI跡”)。 |
| soft_key_alt | 排序鍵,基于全名的拼音,相應display_name_alt(姓名拆分加拼音:如“墨跡”,則為“MO墨JI跡”) |
| name_verified | ? |
| contact_in_visible_group | 這個聯系人在UI中是否可見; 是(1),否(0) |
| sync1 到sync4 | ? |
?
mimetypes表
?
?
| _id | 行id ,與data表中的mimetype_id相應 |
| mimetype | 例如以下 |
?
_id??mimetype
?
1????vnd.android.cursor.item/email_v2
2????vnd.android.cursor.item/im
3????vnd.android.cursor.item/postal-address_v2
4???? vnd.android.cursor.item/photo
5????vnd.android.cursor.item/phone_v2
6????vnd.android.cursor.item/name
7????vnd.android.cursor.item/organization
8????vnd.android.cursor.item/nickname
9????vnd.android.cursor.item/group_membership
10???vnd.android.cursor.item/note
11???vnd.android.cursor.item/website
12??? vnd.android.cursor.item/relation
13??? vnd.android.cursor.item/contact_event
?
1為郵箱;2聊天賬號;3住址。4圖片。5電話號碼。6姓名。7公司+職位;8昵稱;9所屬組。10備注;11網址
?
calls表
?????? android.provider.CallLog.Calls
?
| _id | 行id , |
| number | 通話電話號碼 |
| data | 撥打該電話號碼的開始時間(以1970-01-01 00:00:00)計算到當前的時間差以毫秒為單位 |
| duration | 打電話持續時間。以秒為單位 |
| type | 呼叫類型(“1”來電?!?”外撥,“3”未接) |
| new | 呼叫已被確認與否。 “1”代表來電,外撥?!?”代表未接 |
| name | 假設聯系人存在,與電話號碼相關聯的聯系人的名字 |
| numbertype | 假設聯系人存在,與電話號碼相關聯的電話類型 |
| numberlabel | 假設聯系人存在,自己定義數字類型相關聯的電話號碼數字標簽(比如VOICE)(numbertype 為1-7時numberlabel為null。為0時顯示自己定義標簽) |
| typedial | 撥打電話的類型(語言電話、視頻電話) |
?
phone_lookup表
????????
?
| data_id | 通過data_id能夠找到 data表中相對的數據。 |
| raw_contact_id | 通過raw_contact_id 能夠找到 raw_contact_表中相對的數據 |
| normalized_number | 將每一個電話號碼逆序排列 |
| min_match | ? |
?
groups表
???????? ContactsContract.Groups
| _id | 行id |
| package_id | ? |
| account_name | 賬戶名字 |
| account_type | 帳戶的類型 |
| sourceid | ? |
| version | 版本號。當列或相關數據改動時,將會自己主動改動 |
| dirty | 版本號發生改變的標記 |
| title | 這組顯示的標題 |
| title_res | ? |
| notes | 這組的凝視 |
| system_id | 假設它是一個系統組,這個組的ID。即對同步適配器具有特殊意義的一組,否則返回null。 |
| deleted | 刪除標記;0 or 1。1 表示標記為被刪除。 |
| group_visible | 群組是否在UI中 是否可見;是(1),否(0) |
| should_sync | 這組是否應該同步,是(1),否(0) |
| sync1到sync4 | ? |
?
accounts表
???????? android.accounts.Account
| account_name | 賬戶名字 |
| account_type | 賬戶類型 |
?
settings表
???????? android.provider.ContactsContract.Settings
| account_name | 賬戶名字 |
| account_type | 賬戶類型 |
| ungrouped_versible | 標志該組是否在UI中可見?!?”可見?!?”不可見 |
| should_sync | 依據同步適配器定義的模式。這個標志控制此數據源的頂級的同步行為。 |
?
agg_exceptions表
???????? ContactsContract.AggregationExceptions
| _id | ? |
| type | 異常的類型:TYPE_KEEP_TOGETHER(1),TYPE_KEEP_SEPARATE(2)或TYPE_AUTOMATIC(3)。 |
| raw_contact_id1 | A reference to the _ID of the raw contact that the rule applies to. |
| raw_contact_id1 | A reference to the other _ID of the raw contact that the rule applies to. |
raw_contact_id1和raw_contact_id2之間通過規則(type)引用
?
sqlite_sequence表
???????? SQLite中的自己主動編號列
?
| name | 自己主動編號字段所在的表 |
| seq | 當前用到的序號 |
?
calls 的seq為7 說明我們的通話記錄有7個。
?
???????? 在開發過程中。我們常常要把表重置。也就是說把表中的記錄所有清空,并把自己主動編號歸0。在SQLite中,僅僅須要改動 sqlite_sequence 表就能夠了:
???????? UPDATEsqlite_sequence SET seq = 0 WHERE name = 'TableName'
也能夠直接把該記錄刪掉:
???????? DELETEFROM sqlite_sequence WHERE name = 'TableName'
要是想重置全部表,那直接把 sqlite_sequence 清空就能夠了:
???????? DELETEFROM sqlite_sequence
?
_sync_state表
???????? ContactsContract.SyncState
| _id | 行id |
| account_name | 賬戶名字 |
| account_type | 賬戶類型 |
| data | ? |
?
android_metadata
| locale | 本地語言環境 |
?
contacts2.db一些輔助數據庫表后,。
版權聲明:本文博主原創文章。博客,未經同意不得轉載。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android 联系数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言 基础60题(2)——二维数组操作
- 下一篇: Ubuntu 14 开启SSH服务与使用