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,服務器端的版本號在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。這表明同步適配器需要創建一個新的聯繫人的在服務器端和把它的ID存儲在手機上相應的SOURCE_ID字段。

version

版本;當列或相關數據修改時,將會自動修改

dirty

版本發生改變的標記; (此行需要將其擁有的帳戶同步,當raw contact發生改變時,自動設爲1(除 URI has the CALLER_IS_SYNCADAPTER外)。同步適配器應始終提供查詢參數,以防止不必要的同步:用戶改變服務器上的一些數據,同步適配器更新手機上的聯繫人(無CALLER_IS_SYNCADAPTER標誌)標誌,當設置dirty標誌,從而觸發同步,同步變化到服務器)

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”來電,“2”外撥,“3”未接)

new

呼叫已被確認與否。“1”代表來電,外撥,“0”代表未接

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中可見;“1”可見,“0”不可見

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數據庫中的有些表以後補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章