1. 添加架包 (demo中有 需要的可以下载)
2. 简单介绍
OrmLite是一个数据库操作辅助的开源框架,底层还是Sqlite。O-R-M是Object relational mapping(对象关系映射)的缩写,即业务实体对象与关系型数据库之间的映射。业务实体对象就是我们所说的model类,可以类比为Gson解析时的model类;
OrmLite通过Java注解的方式与数据库建立映射关系,在这里我以一个实例来进行说明
3. 创建实体类 通过注解与数据库联系起来
// 配置该Person实体类对应的表名为orm_person,如果不加tableName="orm_person"属性,则表名为类名
@DatabaseTable(tableName = "orm_person")
public class Person {
//配置字段名为id,并设为主键
@DatabaseField(columnName = "id",generatedId = true)
private int id;
// 配置字段名为name,并且该字段不能为空
@DatabaseField(columnName = "name",canBeNull = false)
private String name;
// 使用本身变量名为字段名
@DatabaseField
private int age;
// 使用本身变量名为字段名
@DatabaseField
private int height;
// 使用本身变量名为字段名 并且设置默认值
@DatabaseField(defaultValue = "男")
private String sex;
// 一个人可以有多本书,eager = true表示可以进行懒加载
// 注:这里是一对多的关系,如果是1对1,我们要用@DatabaseField注解,还要指定(foreign = true)表示是一个外键
@ForeignCollectionField(eager = true)
public ForeignCollection<Book> books;
public Person(){}
public Person(String name, int age, int height, String sex) {
this.name = name;
this.age = age;
this.height = height;
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", 姓名='" + name + '\'' +
", 年龄=" + age +
", 身高=" + height +
", 性别='" + sex +
'}';
}
public ForeignCollection<Book> getBooks() {
return books;
}
public void setBooks(ForeignCollection<Book> books) {
this.books = books;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
4. 和splite数据库一样 这个也需要一个数据库帮助类 创建一个类继承OrmLiteSqliteOpenHelper
public class DbOpenHelper extends OrmLiteSqliteOpenHelper{
private final static String DB_NAME = "test.db"; //数据库名字
private final static int DB_VERSION = 1; //版本号
private DbOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
private static DbOpenHelper helper; //单例
public static DbOpenHelper getHelper(Context context){
if(helper==null) {
synchronized (DbOpenHelper.class){
if(helper==null){
helper = new DbOpenHelper(context);
}
}
}
return helper;
}
//创建表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Person.class); //创建用户表 和Gson类似,第二个参数即是业务实体类
TableUtils.createTable(connectionSource, Book.class); //创建图书表 和Gson类似,第二个参数即是业务实体类
}catch (SQLException e) {
e.printStackTrace();
}
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
if(newVersion>oldVersion){
// 更新操作
try {
TableUtils.dropTable(connectionSource,Person.class,true);
TableUtils.dropTable(connectionSource,Book.class,true);
onCreate(sqLiteDatabase);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
5. 创建一个Dao类 (建议一张表对应一个Dao类)
(1) 构造函数初始化,数据库创建 获取dao对象
private DbOpenHelper mDbHelper;
private Dao mDbHelperDao;
public PersonDao(Context context){
try {
mDbHelper = DbOpenHelper.getHelper(context);
mDbHelperDao = mDbHelper.getDao(Person.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
(2) 添加一条数据和批量添加数据
/**
* 添加个人信息
*/
public void add(Person p){
try {
mDbHelperDao.create(p);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 批量添加个人信息
*/
public void addList(List<Person> persons){
try {
mDbHelperDao.create(persons);
} catch (SQLException e) {
e.printStackTrace();
}
}
(3) 删除一条数据和删除所有数据
/**
* 删除个人信息
*/
public void delete(Person p){
try {
mDbHelperDao.delete(p);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 根据用户ID删除个人信息
*/
public void delete(int personId){
try {
mDbHelperDao.deleteById(personId);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 批量删除个人信息
*/
public void deleteList(List<Person> persons){
try {
mDbHelperDao.delete(persons);
} catch (SQLException e) {
e.printStackTrace();
}
}
(4) 修改数据
/**
* 更新个人信息
*/
public void update(Person p){
try {
mDbHelperDao.createOrUpdate(p);//存在则更新 不存在则创建
// mDbHelperDao.update(p);
} catch (SQLException e) {
e.printStackTrace();
}
}
(5) 查询一条数据和查询所有数据
/**
* 根据id查询个人信息
*/
public Person query(int id){
Person p = null;
try {
p = (Person) mDbHelperDao.queryForId(id);
} catch (SQLException e) {
e.printStackTrace();
}
return p;
}
/**
* 查询所有个人信息
*/
public List<Person> queryAll(){
List<Person> persons = null;
try {
persons = mDbHelperDao.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return persons;
}
6. Activity中实现
//批量删除
private void deleteList() {
//先查询再删除
mDatas.clear();
List<Person> persons = mPersonDao.queryAll();
if(persons!=null){
mPersonDao.deleteList(persons);
if(mAdapter!=null){
mAdapter.notifyDataSetChanged();
}
}
}
//删除一条数据
private void delete(int personId) {
//先删除再查询
mDatas.clear();
mPersonDao.delete(personId);
List<Person> persons = mPersonDao.queryAll();
if(persons==null) return;
for ( Person p : persons) {
mDatas.add(p.toString());
}
if(mAdapter!=null){
mAdapter.notifyDataSetChanged();
}
}
//更新数据
private void update(int personId) {
//先根据用户id查询再更新
mDatas.clear();
Person person = mPersonDao.query(personId);
person.setName("zlc");
person.setSex("男");
person.setAge(24);
person.setHeight(170);
mPersonDao.update(person);
if(person!=null){
mDatas.add(person.toString());
if(mAdapter!=null){
mAdapter.notifyDataSetChanged();
}
}
}
//根据用户id查询数据
private void query(int personId) {
mDatas.clear();
Person person = mPersonDao.query(personId);
if(person!=null){
mDatas.add(person.toString());
if(mAdapter!=null)
mAdapter.notifyDataSetChanged();
}
}
//查询全部
private void queryAll() {
mDatas.clear();
mPersons = mPersonDao.queryAll();
if(mPersons !=null){
for (Person p : mPersons) {
mDatas.add(p.toString());
}
}
if(mAdapter!=null)
mAdapter.notifyDataSetChanged();
}
//批量添加
private void addList() {
List<Person> persons = new ArrayList<>();
mDatas.clear();
for (int i = 0; i < 10; i++) {
Person p;
Random r = new Random();
if(i%2==0){
p = new Person(("cc "+i),(22+i),r.nextInt(20)+150,"女");
}else{
p = new Person(("cc "+i),(22+i),r.nextInt(20)+160,"男");
}
persons.add(p);
}
//插入完成之后查询插入的数据
mPersonDao.addList(persons);
List<Person> pList = mPersonDao.queryAll();
for ( Person p : pList) {
mDatas.add(p.toString());
}
if(mAdapter==null) {
mListView.setAdapter(mAdapter = new ArrayAdapter<>(this, android.R.layout.test_list_item, mDatas));
}else{
mAdapter.notifyDataSetChanged();
}
}
//添加数据
private void add() {
mDatas.clear();
Person p = new Person("cc",23,160,"男");
mPersonDao.add(p);
mDatas.add(p.toString());
if(mAdapter==null) {
mListView.setAdapter(mAdapter = new ArrayAdapter<>(this, android.R.layout.test_list_item, mDatas));
}else{
mAdapter.notifyDataSetChanged();
}
}
7. 源码下载
9. 联系方式
qq: 1509815887
email: zlc921022@163.com