概况:ORMLite是一个第三方的组件包,相当于我们Web的hibernate框架,它封装好了一系列的方法方便更好的调用
首先先下载ORMLite是需要的包(ORMLite官网下载链接:http://ormlite.com/)
本人使用的是(ORMLite5.0的,有需要的朋友ORMLite5.0.rar单击名称即可下载)
下载完成后,将两个包拷贝到项目libs目录下即可以使用
一.ORMLite实体类注解的使用http://files.cnblogs.com/files/zhaoyucong/ORMLite5.0.rar
package com.example.entity; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName="t_message") public class Message { @DatabaseField(generatedId=true) private int id; @DatabaseField(columnName="userName") private String userName; @DatabaseField(columnName="lastMessage") private String lastMessage; @DatabaseField(columnName="datetime") private String datetime; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getLastMessage() { return lastMessage; } public void setLastMessage(String lastMessage) { this.lastMessage = lastMessage; } public String getDatetime() { return datetime; } public void setDatetime(String datetime) { this.datetime = datetime; } }
@DatabaseTable 参数:tableName指定表明,没有将使用类名作为表明
@ForeignCollectionField 表示这个表中的数据在其他表中是外键(其他表的某个字段使用@DatabaseField(foreignColumnName=一个表的id键名,foreign=true)
@DatabaseField
cloumnName:指定字段名,不指定则变量名作为字段名 | canBeNull:是否可以为null | foreignColumnName外键字段指定的外键表中的哪个字段 |
dataType:指定字段的类型 | defaultValue:指定默认值 | 指定长度 |
useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量 | throwIfNull,如果空值抛出异常 | persisted:指定是否持久化此变量,默认true |
unique:字段值唯一 | uniqueCombo整列的值唯一 | index:索引 |
uniqueIndex 唯一索引 | foreignAutoRefresh 外键值,自动刷新 | foreignAutoCreate 外键不存在时是否自动添加到外间表中 |
二.OrmLiteSqliteOpenHelper类
OrmLiteSqliteOpenHelper类是一个抽象的类要实现onCreate()和onUpgrade()两个方法,这个类类似于android的SQLiteOpenHelper方法,大家应该知道这个类的作用了(ps:不清楚的可以去看看本人前一章博客链接:http://www.cnblogs.com/zhaoyucong/p/6113911.html),唯一不相同的是SQLiteOpenHelper里的onCreate()和onUpgrade()是一个回调函数,是不需要自己手动调用,系统会自动调用,却OrmLiteSqliteOpenHelper里的恰好相反,我们可以通过getDao(实体类名称.class)方法获取到一个Dao的对象,然后我们就可以使用Dao类,完成各种各样的数据库增删改操作,Dao<T,V>包含两个泛型,第一个泛型表Dao操作的类,第二个表示操作类的主键类型
常见的方法:
create:插入一条数据
createIfNotExists:如果不存在则插入
createOrUpdate:如果指定id则更新
queryForId:更具id查找
update 查找出数据
delte 删除数据
queryBuilder()创建一个查询生成器:进行复杂查询
deleteBuilder()创建一个删除生成器,进程复杂条件删除
updateBuilder()创建修条件生成器,进行复杂条件修改
使用prepare()方法生成条件使用Dao.query、Dao.delete、Dao.update方法执行
package com.example.winxin2; import java.sql.SQLException; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import com.example.entity.Message; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.support.ConnectionSource; public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String DB_NAME = "mydata.db"; // 数据库名称 private static final int version = 1; // 数据库版本 //定义每一张表的成员变量,其中一个功能:关闭helper,所有DAO对象清理 private Dao<Message, Integer> messageDao; public Dao<Message, Integer> getMessageDao() { if (messageDao==null){ try { messageDao = getDao(Message.class); } catch (SQLException e) { e.printStackTrace(); } } return messageDao; } public DatabaseHelper(Context context) { super(context, DB_NAME, null, version); } /* * 1.此方法,不会自定执行,因为它不是回调函数 * 2.最好也不要自己调用,因为只应该执行1次 */ @Override public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { // TODO Auto-generated method stub } /* * 此方法,不会自定执行,因为它不是回调函数 */ @Override public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void close() { super.close(); if (messageDao!=null){ messageDao = null; } } }
以上就是我对ORMLite的理解