是时候了解一下OrmLite数据库了

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值