-
Notifications
You must be signed in to change notification settings - Fork 108
附、SqliteUtility
使用SqliteUtility,可以针对object直接进行数据库增删改查操作。
可以根据不同的key配置多个数据库,getInstanceInApp(String key, String dbName)实例化的db位于/data/data/[PACKAGE_NAME]/databases目录下,getInstanceInSdcard(String key, String dbName)获取的db位于相对于root_path的path目录下(root_path、path均为SettingUtility配置)。
每一个进行数据库操作的对象,都必须进行id配置。
例如像这样
public class StatusContent implements Serializable {
/**
* 微博ID
*/
@Id(column = "id")
private String id;
}或者像这样
<setting type="org.sina.android.bean.StatusContent">
<extras>
<extra type="id">
<value>id</value>
</extra>
</extras>
</setting>如果两种配置都配置了,那么以sqlite.xml配置优先。
数据库的table以Object的完整包路径为表名,所有属性为字段新建表,属性如果是基本类型,则表字段类型为对应的text或者int类型。如果是其他,例如一个属性是对象引用,则这个字段类型创建为text且数据转换为gson数据和再保存。table保留四个字段_id、com_m_common_owner、com_m_common_key、com_m_common_createat。
_id
类型为int,table主键自增
com_m_common_owner
类型为text,额外字段,标志当前的数据所有者。
com_m_common_key
类型为text,额外字段,标志当前的数据类型
com_m_common_createat
类型为text,额外字段,标志当前的数据在db的新建或者更新时间,单位为s
例如Aisen微博的关注、粉丝、互粉等数据的数据类型均为WeiBoUser,所以使用com_m_common_key字段标志区分,而且以 com_m_common_owner字段标志所有者(不同的授权账号)。具体代码见FriendDB
具体的增删改查代码,大家去看Aisen微博的代码吧,这里FriendMentionDB有,这里AccountDB也有,这里EmotionsDB还有,Aisen微博中所有针对数据库操作都是使用SqliteUtility
当一个对象的属性发生更改时,如果是新增属性,则数据库表会自动新增对应的字段,值默认为null,如果是删除属性,那么没辙了,因为sqlite没有允许删除字段操作。