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