相信大家应该都知道,在Android系统中,保存数据的方法多种,但应该可以一起概括为四种方式:
• Preferences
• Files
• Databases
• Network
今天我们来看看Databases这种方式。在Android系统中内置了一款轻量级数据库sqlite,关于它的介绍相信网上一定多得数不清,所以我这里就不废话了。
因为有些朋友不熟悉SQL语句,或者说不想写,再或者说怎么写都不对,这里就引出了今天我要介绍的OrmLite:Object Relational Mapping Lite (ORM Lite)。
OrmLite提供了一些轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销功能。它支持的SQL数据库使用JDBC的数量,还支持原生的Android操作系统数据库API调用sqlite。首先我们要使用它呢,就要去它的官方http://ormlite.com下载你想要的版本,这里我下载了最新的4.30。接下来我们来写一个简单的项目,同时对它的使用方法进行一个详细的介绍。
建立好项目后呢,我们加入OrmLite的jar包,然后建立两个实体类,我用的例子是客户和订单,一个客户对应多个订单这样的关系。
接着为这两个实体类添加属性和字段,需要注意的是,一定要有一个无参的构造函数,OrmLite创建对象时需要使用。
Account:int aId,String aName;Order:int oid,String oName,Account account。
接着就到了添加ORMLite注解了。注解是特殊的代码标志已在Java版本开始,要指定什么类和字段存储在数据库中,ORMLite支持其自己的注解(@ DatabaseTable @ DatabaseField)或更多的标准注解从javax.persistence包。注解是最简单的方法来配置你的类,但你也可以使用Java代码或Spring的XML配置类 。以下是注解的详细介绍:
@ DatabaseTable注解可以有一个可选的TableName的参数指定类对应的表的名称。如果没有指定表名的情况下,默认情况下使用类名作为对应的表名。例如:
@DatabaseTable(tableName = "accounts")
public class Account {...} 像这样的话,Account类对应的表名就是accounts,如果不指定则为account。
@ DatabaseField注解可以有以下字段:
columnName 列名,未指定时为字段名
dataTypeDataType类的类型的字段。通常的类型是从Java类的领域,并不需要指定。
defaultValue 默认值
width 宽度 默认是0,表示不限
canBeNull 是否允许为空,默认为true
id 主键 默认为false
generatedId 自增长的主键 默认值是false
generatedIdSequence 字符串名称的序列号 类同generatedId,但您可以指定序列的名称使用。默认为null
foreign 外键,默认为false,字段不能是一个原始类型。在外键对象的类中,必须要有一个ID字段(ID, generatedId,generatedIdSequence)
useGetSet 应用get和set方法访问。默认为false
unknownEnumName 表示该字段是一个Java的枚举类型
throwIfNull 如果为空值,抛出一个异常 默认为false
persisted 是否在数据库中存储这个领域 默认为true
format 指定某一特定领域的信息格式,如指定日期字符串的格式
unique 唯一约束,默认为false
uniqueCombo 唯一行,该行内所有字段成为一个唯一约束,如有firstName 和 lastName两个字段,为"张"和"梅",那么该表内不可再插 入"张","梅", 但你可插入"张","全梅"。
index 是否建立索引 默认为false
uniqueIndex 唯一索引 默认为false
indexName 为这一领域的索引添加一个名字
uniqueIndexName为这一领域的索引添加一个唯一的名字
foreignAutoRefresh 当查询到一个外键对象时,是否自动刷新 如 Order表中有Account外键对象,当返回Order的记录时是否也返回Account的记录, 默认为false
maxForeignAutoRefreshLevel 为了防止无限递归或者无限循环时 需要用到该属性设置自动刷新的最高级别
allowGeneratedIdInsert 插入一个ID字段是否覆盖它生成的ID的对象 默认为false
columnDefinition 定义列,默认情况下,数据库类型是用于自动生成所需的SQL来创建列,所以该属性并不常用
foreignAutoCreate 在插入一个有外键对象的对象时,是否自动插入这个外键对象
version 行版本 当一个对象被更新,以防止数据损坏多个实体时更新在同一时间进行的保护
以上资料出处:http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite.html#SEC_Top
回头一看,居然写了这么多,那具体的操作我就放到下一次来讲吧。欢迎指点错误的地方!