ROOM

ROOM对Sqlite进行了封装,直接使用ROOM来进行数据库访问。

ROOM数据库查询可以直接返回LiveData对象,每次CRUD都会自动更新该LiveData,LiveData始终是数据库最新值

利用该特性可以直接将数据库的变化,通过LiveData作为观察者传递到ViewModel,保证拿到的数据都是数据库中时刻最新的值

使用流程:

Entry类-->Dao-->EntryRoomDatabase(单例模式)-->Repository(从EntryRoomDatabase获得Dao)-->在Repository中实现异步-->AndroidViewModel通过Repository访问数据库CRUD

数据库操作不应该在MainThread中,所以我们使用AsyncTask来进行数据库操作。

UI层(Activity和Fragment)所有的数据应该都直接从ViewModel来获取,在ViewModel中我们使用AsyncTask来进行数据库操作。

ROOM进行数据库操作依赖于Dao接口,在该接口中实现了很多数据库操作。

主要角色Entry 实体类

Dao 定义接口数据库操作

继承RoomDatabase 通过ROOM实例化database返回Dao供调用

异步类调用Dao中数据库操作如AsyncTask

Repository对操作进行封装

AndroidViewModel 聚合 Repository来执行数据库操作

使用方法

Entry类-->Dao-->EntryRoomDatabase(单例模式)-->Repository(从EntryRoomDatabase获得Dao)-->在Repository中实现异步-->AndroidViewModel通过Repository访问数据库CRUD

代码实现

Entry

@Entity

public class Word {

@PrimaryKey(autoGenerate = true)

private int id;

@ColumnInfo(name = "english")

private String english;

@ColumnInfo(name = "chinese")

private String mean;

public Word(String english, String mean) {

this.english = english;

this.mean = mean;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getEnglish() {

return english;

}

public void setEnglish(String english) {

this.english = english;

}

public String getMean() {

return mean;

}

public void setMean(String mean) {

this.mean = mean;

}

}

Dao

@Dao

public interface WordDao {

@Insert

void insertWord(Word... words);

@Update

void update(Word... words);

@Delete

void delete(Word... words);

@Query("DELETE FROM WORD")

void deleteAll();

@Query("SELECT * FROM WORD ORDER BY ID DESC")

LiveData> getAll();

}

WordRoomDatabase

@Database(entities = {Word.class},version = 1,exportSchema = false)

public abstract class WordRoomDatabase extends RoomDatabase {

public abstract WordDao getWordDao();

private static WordRoomDatabase INSTANCE;

public static WordRoomDatabase getInstance(final Context context) {

if (INSTANCE == null) {

synchronized (WordRoomDatabase.class) {

if (INSTANCE == null) {

INSTANCE = Room.databaseBuilder(context.getApplicationContext(),

WordRoomDatabase.class, "word_database")

.build();

}

}

}

return INSTANCE;

}

}

Repository

public class Repository {

private LiveData> wordsLive;

public LiveData> getWordsLive() {

return wordsLive;

}

//用来调用数据库操作

private WordDao wordDao;

public Repository(Context context) {

WordRoomDatabase wordRoomDatabase = WordRoomDatabase.getInstance(context.getApplicationContext());

wordDao = wordRoomDatabase.getWordDao();

wordsLive = wordDao.getAll();

}

public void insert(Word... words){

new InsertTask(wordDao).execute(words);

}

public void delete(Word... words){

new DeleteTask(wordDao).execute(words);

}

public void update(Word... words){

new UpdateTask(wordDao).execute(words);

}

public void deleteAll(){

new DeleteAllTask(wordDao).execute();

}

}

VeiwModel

public class MainViewModel extends AndroidViewModel {

// ViewModel 没有很好的方法来获得一个Context 需要继承AndroidViewModel

Repository repository;

public MainViewModel(Application application) {

super(application);

this.repository = new Repository(application);

}

public LiveData> getAll(){

return repository.getWordsLive();

}

public void insert(Word... words){

repository.insert(words);

}

public void update(Word... words){

repository.update(words);

}

public void delete(Word... words){

repository.delete(words);

}

public void deleteAll(){

repository.deleteAll();

}

}

总结

android框架连接mysql_Android:ROOM数据库框架相关推荐

  1. Android Studio 连接阿里云数据库【制作基于数据库的多人远程聊天APP】

    Android Studio 连接阿里云数据库的简单方法[制作基于数据库的多人远程聊天APP] 首先购买好一个阿里云数据库RDS[我买了一年用了49元] 1.进入官网–>打开右上角的控制台 2. ...

  2. Android Studio连接云服务器数据库

    Android Studio连接云服务器数据库 写在开始 1.Navicat连接云服务器数据库 2.MyEclipse开发服务端servlet的相关步骤 Android Studio端代码编写 写在开 ...

  3. 使用Spring JDBC框架连接并操作数据库

    在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...

  4. greendao连接mysql_Android数据存储框架GreenDao 3.0使用详解

    GreenDao 3.0 的使用 1.简介 简单的讲,GreenDao是一个将对象映射到 SQLite数据库中的轻量且快速的 ORM 解决方案.(GreenDaois a light & fa ...

  5. 如何在 Android 中使用 ObjectBox 数据库框架?

    导读 不论是对象映射还是数据集合,Android开发者有太多数据库框架可以选择.ObjectBox数据库这个号称移动端最快的数据库框架,具有超快速.面向对象的API.单元测试即时.线程简单.数据库可自 ...

  6. Android客户端开发—开源数据库框架LitePal

    LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置.(它将 ...

  7. android 连接mysql orm_Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 S ...

  8. 使用反射+注解封装一个基于Sqlite极简的android数据库框架

    数据库 背景 GreenDao 封装 创建数据库 对象映射表 数据库操作 扩展 总结 背景 目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多 ...

  9. Android GreenDao数据库框架

    ## Android GreenDao数据库框架 GreenDao简介 Android平台的对象关系映射工具(ORM) 为关系型数据库提供面向对象的接口 简化数据库操作 ORM框架 所谓ORM框架,即 ...

最新文章

  1. 使用Junit4时问题
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第七小题
  3. (电影播放器)MPMoviePlayerController
  4. 在敏捷中应用测试驱动开发
  5. 《系统集成项目管理工程师》必背100个知识点-76配置审计
  6. Qt for Android创建AndroidManifest.xml和Java类文件
  7. 安装mysql-connector-python-8.0.11-py3.6遇到问题
  8. 在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、转人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服、人工客服
  9. navigationItem和navigationBar相关性
  10. 计算机网络配置vlan实验报告,北京理工大学-计算机网络实践-VLAN配置及VLAN间通信实验报告...
  11. 由西云数据运营的中国第二个AWS区域正式向客户提供服务
  12. Linux 软件源介绍
  13. 操作系统之进程通信:高级通信机制四大类
  14. MATLAB——斜抛运动
  15. 信息化项目WBS实战总结
  16. minHash最小哈希
  17. ARM64内核系统调用详解(基于kernel-4.9)
  18. mysql安装简书_MySQL 安装和配置
  19. 第二十课 Django Admin后台管理
  20. 基于redis库存刷盘类相关业务实现总结

热门文章

  1. java 类定义_JAVA类与对象(二)----类定义基础
  2. jpa分页查询_spring data jpa 居然提供了这么多查询方式!
  3. TeaseR++:快速鲁棒的C++点云配准库介绍+英文版视频教程
  4. 在Linux部署Nodejs项目,一旦断掉XShell就会导致服务被停掉,真的很郁闷~怎么办?果断用forever
  5. 异步预热在线视频实现
  6. JSP和Servlet学习笔记1 - 访问配置
  7. 057 Insert Interval 插入区间
  8. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34
  9. 如何用CSS快速布局(一)—— 布局元素详细
  10. MyEclipse中的快捷键