Android Room框架使用

目录

Room 的使用三角色介绍:

使用步骤:

使用准备:

使用: 


Room 的使用三角色介绍:

  1. @Entity(数据库表  与  类相似);
  2. @Dao (操作引擎,用于操作数据库)
  3. @Database(创建数据库)

使用步骤:

使用准备:

  1. 导入依赖:(在 bulid.gradle 文件)中导入,(导入的本处版本只是举例,可在官网出查找其他版本)
    dependencies {
    
        def room_version = "2.4.2"
    
        implementation "androidx.room:room-runtime:$room_version"
        annotationProcessor "androidx.room:room-compiler:$room_version"
    }
  2. 结合Rxjava使用额外添加相关依赖:
     dependencies {
        ...
       // optional - RxJava2 support for Room
        implementation "androidx.room:room-rxjava2:$room_version"
    
        // optional - RxJava3 support for Room
        implementation "androidx.room:room-rxjava3:$room_version"
    
        // optional - Guava support for Room, including Optional and ListenableFuture
        implementation "androidx.room:room-guava:$room_version"
    
        // optional - Test helpers
        testImplementation "androidx.room:room-testing:$room_version"
    
        // optional - Paging 3 Integration
        implementation "androidx.room:room-paging:2.5.0-alpha01"
    }

使用: 

  1. @Entity  创建 数据库表(与 类对象相似):    
    package com.example.androidapp.SQlist;
    
    import androidx.room.Entity;
    import androidx.room.PrimaryKey;
    
    @Entity(tableName = "Agency")
    public class Agency implements Serializable {
        @PrimaryKey(autoGenerate = true)
        private int id;
        private String agency_name;
        private String agency_nowTime;
        private String agency_futureTime;
    
    
        private String agency_okTime;
        private String agency_type;
        private String agency_nowstate;
        private String agency_context;
    
        public Agency(String agency_name, String agency_nowTime, String agency_futureTime,
             
        String agency_type, String agency_nowstate, String agency_context) {
            this.agency_name = agency_name;
            this.agency_nowTime = agency_nowTime;
            this.agency_futureTime = agency_futureTime;
            this.agency_type = agency_type;
            this.agency_nowstate = agency_nowstate;
            this.agency_context = agency_context;
        } 
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getAgency_name() {
            return agency_name;
        }
    
        public void setAgency_name(String agency_name) {
            this.agency_name = agency_name;
        }
    
        public String getAgency_nowTime() {
            return agency_nowTime;
        }
    
        public void setAgency_nowTime(String agency_nowTime) {
            this.agency_nowTime = agency_nowTime;
        }
    
        public String getAgency_futureTime() {
            return agency_futureTime;
        }
    
        public void setAgency_futureTime(String agency_futureTime) {
            this.agency_futureTime = agency_futureTime;
        }
    
        public String getAgency_type() {
            return agency_type;
        }
    
        public void setAgency_type(String agency_type) {
            this.agency_type = agency_type;
        }
    
        public String getAgency_nowstate() {
            return agency_nowstate;
        }
    
        public void setAgency_nowstate(String agency_nowstate) {
            this.agency_nowstate = agency_nowstate;
        }
    
        public String getAgency_context() {
            return agency_context;
        }
    
        public void setAgency_context(String agency_context) {
            this.agency_context = agency_context;
        }
    
        public String getAgency_okTime() {
            return agency_okTime;
        }
    
        public void setAgency_okTime(String agency_okTime) {
            this.agency_okTime = agency_okTime;
        }
    
        @Override
        public String toString() {
            return "Agency{" +
                    "id=" + id +
                    ", agency_name='" + agency_name + '\'' +
                    ", agency_nowTime='" + agency_nowTime + '\'' +
                    ", agency_futureTime='" + agency_futureTime + '\'' +
                    ", agency_type='" + agency_type + '\'' +
                    ", agency_nowstate='" + agency_nowstate + '\'' +
                    ", agency_context='" + agency_context + '\'' +
                    '}';
        }
    }
  2. @Dao 操作数据库
    package com.example.androidapp.SQlist;
    
    import androidx.room.Dao;
    import androidx.room.Delete;
    import androidx.room.Insert;
    import androidx.room.Query;
    import androidx.room.Update;
    
    import java.util.List;
    @Dao
    public interface AgencyDao {
    
        @Insert
        void insertAgencies(Agency... agencies);
    
        @Update
        void updateAgencies(Agency... agencies);
    
        @Delete
        void deleteAgencies(Agency... agencies);
    
        @Query("SELECT * FROM Agency ORDER BY ID DESC")
        List<Agency> getAllAgency();
    }
  3. @Database 创建 数据库 并与 数据表 关联:暴露Dao给用户操作数据库
    package com.example.androidapp.SQlist;
    
    import android.content.Context;
    
    import androidx.room.Database;
    import androidx.room.Room;
    import androidx.room.RoomDatabase;
    
    //数据库 关联 之前的表 数据库信息
    //,User.class
    @Database(entities = {Agency.class},version = 1,exportSchema = false)
    public abstract class AgencyDatabase extends RoomDatabase {
    
    //    暴露 dao 给用户操作 数据库
        public abstract AgencyDao getAgencyDao();
    
    //    单例模式 返回 db
        private static AgencyDatabase INSTANCE;
        static synchronized AgencyDatabase getInstance(Context context){
            if (INSTANCE == null){
                INSTANCE = Room.databaseBuilder(context.getApplicationContext(),AgencyDatabase.class,"Agency_database")
                        .build();
            }
            return INSTANCE;
        }
    }
    
  4. 创建 一个 DBclass 用于实现 在异步操作 中进行数据操作(这里我用了AsyncTask进行异步操作)
    package com.example.androidapp.SQlist;
    
    import android.content.Context;
    import android.os.AsyncTask;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class DBEngine {
    
        //    接收 传入的 AgencyDao 对象
        private AgencyDao agencyDao;
        //    接收 传入的 UserDao 对象
        private UserDao userDao;
    
    
        //    接收 获取的所有数据 实现单例
        private static List<Agency> allAgencies = new ArrayList<>();
        private static List<User> allUsers = new ArrayList<>();
    
        //    实现 构造方法
        public DBEngine(Context context) {
            AgencyDatabase agencyDatabase = AgencyDatabase.getInstance(context);
            agencyDao = agencyDatabase.getAgencyDao();
            UserDatabase userDatabase = UserDatabase.getInstance(context);
            userDao = userDatabase.getUserDao();
        }
    
        ;
    
    //*********************************************************************************************
    
        //    插入 操作
        public void insertAgencies(Agency... agencies) {
    //        开启 InsertAsyncTask 线程
            new InsertAsyncTask(agencyDao).execute(agencies);
        }
        //    更新 操作
        public void updateAgencies(Agency... agencies) {
            new UpdateAsyncTask(agencyDao).execute(agencies);
        }
        //    删除 操作
        public void deleteAgencies(Agency... agencies) {
            new DeleteAsyncTask(agencyDao).execute(agencies);
        }
        //    获取 操作
        public void getAllAgencies(Agency... agencies) {
            new GetAllAgencies(agencyDao).execute();
        }
    //*********************************************************************************************
    //Agency
        //    实现 插入功能
        private static class InsertAsyncTask extends AsyncTask<Agency, Void, Void> {
    
            //        获取 AgencyDao 对象
            private AgencyDao dao;
    
            //        实现 构造方法
            public InsertAsyncTask(AgencyDao agencyDao) {
                dao = agencyDao;
            }
    
            //        实现 AgencyDao 操作
            @Override
            protected Void doInBackground(Agency... agencies) {
                dao.insertAgencies(agencies);
                return null;
            }
        }
        //    实现 更新功能
        private static class UpdateAsyncTask extends AsyncTask<Agency, Void, Void> {
    
            private AgencyDao dao;
    
            public UpdateAsyncTask(AgencyDao agencyDao) {
                dao = agencyDao;
            }
    
            @Override
            protected Void doInBackground(Agency... agencies) {
                dao.updateAgencies(agencies);
                return null;
            }
        }
        //    实现 删除功能
        private static class DeleteAsyncTask extends AsyncTask<Agency, Void, Void> {
            private AgencyDao dao;
    
            public DeleteAsyncTask(AgencyDao agencyDao) {
                dao = agencyDao;
            }
    
            @Override
            protected Void doInBackground(Agency... agencies) {
                dao.deleteAgencies(agencies);
                return null;
            }
        }
        //    实现 获取所有数据 功能
        private static class GetAllAgencies extends AsyncTask<Void, Void, List<Agency>> {
    
            private AgencyDao dao;
    
            public GetAllAgencies(AgencyDao agencyDao) {
                dao = agencyDao;
            }
            //        获取数据
            @Override
            protected List<Agency> doInBackground(Void... voids) {
                allAgencies = dao.getAllAgency();
                return allAgencies;
            }
            //        返回 数据
            @Override
            protected void onPostExecute(List<Agency> agencies) {
                super.onPostExecute(agencies);
                allAgencies = agencies;
            }
        }
  5. 在主类 中 实例化 一个DB 对象,都数据进行操作
        //        获取 数据库引擎
        private DBEngine dbEngine;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dbEngine = new DBEngine(this);
    
            dbEngine.getAllAgencies();
    
    //      实例化 一个 Agency 对象
            Agency new_agency = new Agency(name, nowTimeStr, futureTimeStr, typeStr, stateStr, contextStr);
    
    
        //    插入 操作
            dbEngine.insertAgencies(new_agency );
        //    更新 操作
            dbEngine.updateAgencies(new_agency );
        //    删除 操作
            dbEngine.deleteAgencies(new_agency );
        //    获取 操作
            dbEngine.getAllAgencies(new_agency );
       
        }  

        项目案例:

        苏苏待办:

        github:        GitHub - susihao/Agency: 苏苏待办

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值