Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 聯系人數據庫

android 聯系人數據庫

編輯:關於Android編程

聯系人數據庫學習

2011-10-31(這是android2.3上聯系人的db)

簡介

Android中聯系人的信息都是存儲在一個叫contacts2.db的數據庫中。該數據庫的路徑是:/data/data/com.android.provider.contacts/databases/contacts2.db。如圖1:

\\

\

<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ztLDx7/J0tTU2mNtZNbQzai5/WFkYsP8we6w0bjDzsS8/sCts/bAtKOovt/M5b/awe7OqqO6YWRiICBwdWxsL2RhdGEvZGF0YS9jb20uYW5kcm9pZC5wcm92aWRlci5jb250YWN0cy9kYXRhYmFzZXMvY29udGFjdHMyLmRiINKqtOa3xbXEwre+tlzX1Lao0uXD+9fWLmRio6mjrCC/ydLUyrnTw1NRTGl0ZVNwebmkvt/AtLLpv7S4w8r9vt2/4qGjyOfNvDKjujwvcD4KPHA+PGltZyBzcmM9"" alt="\">\

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved