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数据库中的有些表以后补充。

android 联系人数据库

时间: 2024-10-22 05:26:41

android 联系人数据库的相关文章

Android 联系人数据库介绍以及对联系人的基本操作

一. 联系人数据库? 联系人的数据库文件的位置/data/data/com.android.providers.contacts/databases.contacts2.db? 数据库中重要的几张表1.contacts表该表保存了所有的手机测联系人,每个联系人占一行,该表保存了联系人的ContactID.联系次数.最后一次联系的时间.是否含有号码.是否被添加到收藏夹等信息.2.raw_contacts表该表保存了所有创建过的手机测联系人,每个联系人占一行,表里有一列标识该联系人是否被删除,该表保

Android联系人数据库

转载自http://www.2cto.com/kf/201406/309356.html 通信录是一个3层的数据存储模型,这三个数据模型就是ContactsContact.Data,ContactsContact.RawContacts,ContactsContact.Contacts.对应三个表:data.raw_contacts.contacts. 1) contacts表 表保存了所有的手机测联系人,每个联系人占一行,该表保存了联系人的ContactID.联系次数.最后一次联系的时间.是否

Android手机通讯录项目开发--联系人数据库contacts2.db介绍

项目描述:该项目为基于Android平台的手机通讯录,主要模块分为四个部分:联系人管理模块,通话记录管理模块,短信管理模块,系统设置模块. 系统结构图如下: 本项目启动时间:2014年5月28日 说明:本次开发项目的所有源码全部会分享给大家.开发此项目的目的有这几点:一.锻炼独立开发项目的能力,二.增加对Android开发的了解,三.熟悉Android通讯录机制. 闲话不多说,正式开始! 技术要点一:熟悉Android联系人数据库contacts2.db 1.获得联系人数据库contacts2.

Android通讯录数据库介绍与基本操作(增删改查)

Android通讯录数据库介绍与基本操作(增删改查) 2014年2月21日 Android通讯录管理总结 这几天导师安排我一个任务就是研究一下Android通讯录获取联系人.通话记录.短信的方法,还有看看不同Android版本之间的异同是否能做到兼容之类的事情.Android通讯录这一块,我个人感觉是挺乱的,网上一堆关于查询本地数据库获取联系人的方法,但似乎都没有仔细说明数据有哪些重要的表,它们之间有什么联系.下面是本人查询资料总结的一下知识点,方便童鞋们以后用到. http://xys2891

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

android sqlite数据库操作

sqlite有一点不同于其他常见数据库,就是sqlite数据库是存成文件的,可以直接把该文件从手机里导出来,以文件的形式存在,然后放到电脑上查看. Android操作数据库有如下步骤: 1.继承SQLiteOpenHelper,实现里面的方法. public class MyDbHelper extends SQLiteOpenHelper {     public MyDbHelper(Context context) {         super(context, "db3", 

android 联系数据库

联系人数据库学习 2011-10-31(这是android2.3在接触db) 简单介绍 Android中联系人的信息都是存储在一个叫contacts2.db的数据库中.该数据库的路径是:/data/data/com.android.provider.contacts/databases/contacts2.db.如图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbzcxMzQ=/font/5a6L5L2T/fontsize/400/fil

android通讯录数据库详解

查看手机的手机库导出这个文件其实用到的表也就四张, 注: 1.contacts 表 _id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据.display_name: 联系人名称photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空times_contacted:通话记录的次数last_time_contacted: 最后的通话时间 lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup 2.data表 raw_contac

android 本地数据库sqlite的封装

单机android   sqlite数据库的实现,这个数据库可与程序一起生成在安装包中 一.下载sqlite3.exe文件 二.运行 cmd 转到sqlite3.exe 所在目录  运行 sqlite3.exe 数据库名.db     然后会出现sqlite>的命令提示符 输入创建表的语句, create table 表名('列','列'...):(注意: 要在结束部分加  分号 )     此时会在sqlite3.exe 所在目录,出现所建数据库的文件 三.如果想在Android中运行的话,需