package org.orange.familylink.database; import org.orange.familylink.data.MessageLogRecord.Direction; import org.orange.familylink.data.MessageLogRecord.Status; import android.net.Uri; import android.provider.BaseColumns; /** * 此类为常量容器 * @author OrangeTeam * */ public class Contract { //scheme为uri中的头部,已由android规定 public static final String SCHEME = "content://"; //数据库名字 public static final String DATABASE_NAME = "familylink.db"; /** * 联系人表名“contacts" */ public static final String DATABASE_CONTACTS_TABLE = "contacts"; /** * 信息表名“messages” */ public static final String DATABASE_MESSAGES_TABLE = "messages"; //数据库的版本 public static final int DATABASE_VERSION = 1; //这个私有的构造方法是为了防止实例化这个类 private Contract(){} /** * 这个内部类是对联系人表的常量进行定义 * @author OrangeTeam * */ public static final class Contacts implements BaseColumns{ //防止实例化 private Contacts(){} //authority为uri中主机地址 public static final String AUTHORITY = "org.orange.familylink.provider.contactsprovider"; //这是uri中contacts表的路径 private static final String PATH_CONTACTS = "/contacts"; //这是uri中contacts表中的记录的路径 private static final String PATH_CONTACTS_ID = "/contacts/"; public static final Uri CONTACTS_URI = Uri.parse(SCHEME + AUTHORITY + PATH_CONTACTS); public static final Uri CONTACTS_ID_URI = Uri.parse(SCHEME + AUTHORITY + PATH_CONTACTS_ID); //contacts表中集合类型的mime public static final String CONTACTS_TYPE = "vnd.android.cursor.dir/vnd.familylink.contacts"; //contacts表中单个项类型的mime public static final String CONTACTS_ITEM_TYPE = "vnd.android.cursor.item/vnd.familylink.contacts"; /** * 联系人表中的联系人名字 String */ public static final String COLUMN_NAME_NAME = "name"; /** * 联系人表中的联系人电话号码 String */ public static final String COLUMN_NAME_PHONE_NUMBER = "phone_number"; /** * 联系人表中的联系人照片,存储是blob,但用数据库操作类进行操作时是传入bitmap */ public static final String COLUMN_NAME_PHOTO = "photo"; public static final String CONTACTS_DEFAULT_SORT_ORDER = COLUMN_NAME_PHONE_NUMBER + " DESC"; //这个常量字符串是创建contacts表的sql语句 public static final String CONTACTS_TABLE_CREATE = "create table " + DATABASE_CONTACTS_TABLE + " (" + _ID + " integer primary key," + COLUMN_NAME_NAME + " varchar(60)," + COLUMN_NAME_PHONE_NUMBER + " varchar(20)," + COLUMN_NAME_PHOTO + " blob);"; } /** * 这个内部类是对信息表中的常量进行定义 * @author OrangeTeam * */ public static final class Messages implements BaseColumns{ //防止实例化 private Messages(){} //authority为uri中主机地址 public static final String AUTHORITY = "org.orange.familylink.provider.messagesprovider"; //uri中messages表的路径 public static final String PATH_MESSAGES = "/messages"; //uri中messages表的记录的路径 public static final String PATH_MESSAGES_ID = "/messages/"; public static final Uri MESSAGES_URI = Uri.parse(SCHEME + AUTHORITY + PATH_MESSAGES); public static final Uri MESSAGES_ID_URI = Uri.parse(SCHEME + AUTHORITY + PATH_MESSAGES_ID); //messages表中集合类型的mime public static final String MESSAGES_TYPE = "vnd.android.cursor.dir/vnd.familylink.messages"; //messages表中单项类型的mime public static final String MESSAGES_ITEM_TYPE = "vnd.android.cursor.item/vnd.familylink.messages"; /** * 信息表中的‘联系人记录的id’,也就是这个字段是跟联系人表关联,来自联系人表的id字段 long */ public static final String COLUMN_NAME_CONTACT_ID = "contact_id"; /** * 信息表中的地址也就是手机号 String */ public static final String COLUMN_NAME_ADDRESS = "address"; /** * 信息表中的时间字段用于存储发送或接受短信的时间,存储是用long,但如果用数据库操作类进行操作时是用Date */ public static final String COLUMN_NAME_TIME = "time"; /** * 信息表中的状态存储信息是‘正在发送’、‘已发送’、‘已送达’、‘发送失败’等情况 String */ public static final String COLUMN_NAME_STATUS = "status"; /** * 信息表中的信息所发送的内容就是短信内容 String */ public static final String COLUMN_NAME_BODY = "body"; /** * 信息表中的代表短信级别的码 int */ public static final String COLUMN_NAME_CODE = "CODE"; //这个常量字符串是创建messages表的sql语句 public static final String MESSAGES_TABLE_CREATE = "create table " + DATABASE_MESSAGES_TABLE + " (" + _ID + " integer primary key," + COLUMN_NAME_CONTACT_ID + " integer references contacts(_id)," + COLUMN_NAME_ADDRESS + " varchar(20)," + COLUMN_NAME_TIME + " integer," + COLUMN_NAME_STATUS + " varchar(30)," + COLUMN_NAME_BODY + " text," + COLUMN_NAME_CODE + " integer" + ");"; public static final String MESSAGES_DEFAULT_SORT_ORDER = COLUMN_NAME_TIME + " DESC"; //为messages表中的time字段创建索引 public static final String INDEX_CREATE = "create index messages_time_index on " + DATABASE_MESSAGES_TABLE + "(" + COLUMN_NAME_TIME + ");"; /** * 取得与指定条件对应的SQL where子句(不包括“WHERE”自身) * @param status 筛选条件:消息状态 * @return SQL where子句,满足此子句的消息的状态都为status */ public static String getWhereClause(Status status) { return COLUMN_NAME_STATUS + " = '" + status.name() + "'"; } /** * 取得与指定条件对应的SQL where子句(不包括“WHERE”自身) * @param direction 筛选条件:消息方向 * @return SQL where子句,满足此子句的消息的{@link Direction}都为direction */ public static String getWhereClause(Direction direction) { switch (direction) { case RECEIVE: return "(" + getWhereClause(Status.HAVE_READ) + ") OR (" + getWhereClause(Status.UNREAD) + ")"; case SEND: return "(" + getWhereClause(Status.DELIVERED) + ") OR (" + getWhereClause(Status.SENT) + ") OR (" + getWhereClause(Status.SENDING) + ") OR (" + getWhereClause(Status.FAILED_TO_SEND) + ")"; default: throw new UnsupportedOperationException("unsupported direction: " + direction); } } } }