Room数据库框架的使用

2024-04-03 13:48
文章标签 使用 数据库 框架 room

本文主要是介绍Room数据库框架的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

google推出了自己的数据库框架:Room  有点类似于greenDao的使用

官方介绍:The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite

1、首先我们需要在项目的build.gradlle文件添加google的maven仓库

allprojects {repositories {google()jcenter()}
}

2、接着在主module的build.gradle文件添加依赖

implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
implementation 'android.arch.persistence.room:testing:1.1.1'

3、接下来建立一个实体类,类似于greendao,都i是通过实体类映射的方式来创建

@Entity(tableName = "article_type")
public class ArticleType {//设置主键,并且定义自增增@PrimaryKey(autoGenerate = true)private int id;//字段映射具体的数据表字段名@ColumnInfo(name = "name")private String name;@ColumnInfo(name = "count")private int count;@ColumnInfo(name = "title")private String title;@ColumnInfo(name = "image")private String image;@ColumnInfo(name = "content")private String content;@Overridepublic String toString() {return "ArticleType{" +"id=" + id +", name='" + name + '\'' +", count=" + count +", title='" + title + '\'' +", image='" + image + '\'' +", content='" + content + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getImage() {return image;}public void setImage(String image) {this.image = image;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}

//必须指定一个构造方法,room框架需要。并且只能指定一个

//,如果有其他构造方法,则其他的构造方法必须添加@Ignore注解

 public ArticleType() { }//其他构造方法要添加@Ignore注解@Ignorepublic ArticleType(int id, String name, int count, String title, String image, String content) {this.id = id;this.name = name;this.count = count;this.title = title;this.image = image;this.content = content;}
}

注意:(1)@Entity(tableName="表名称")    此注解放在实体类的类名上面,可以设置表的名称、主键、外键等信息

           (2)@PrimaryKey(autoGenerate = true)  此注解放在主键变量上,并定义自增

           (3)@ColumnInfo(name = "字段名称")  此注解放在普通变量上,字段映射具体的数据表字段名

           (4)@Ignore        这个注解需要好好说一下,放在方法和变量上。Room定义必须有一个无参的构造方法,所以说如果你想有别的构造方法,需要在别的构造方法上添加上此注解。如果说你实体类中的字段不是表中的字段,这时也需要忽略下,需要在变量上添加此注解

 

4、增删改查

(1)、增加 @Insert(onConflict = OnConflictStrategy.REPLACE)
OnConflictStrategy.REPLACE表如已有数据,就覆盖掉。数据的判断通过主键进行匹配,也就是id,非整个ArticleType对象。增加分为两种,一种是增加一条、另外一种是增加多条数据,

@Insert(onConflict = OnConflictStrategy.REPLACE)
Long insert(ArticleType articleType);@Insert(onConflict = OnConflictStrategy.REPLACE)
List<Long> insertAll(List<ArticleType> articleTypeList);

(2)、删除

@Delete()
int delete(ArticleType articleType);@Delete()
int deleteAll(List<ArticleType> articleTypeList);

(3)、修改     需要传入修改完的实体类,其中必须要有主键(通过主键来进行修改)

@Update()
int update(ArticleType articleType);@Update()
int updateAll(ArticleType...articleTypes);

(4)、查询

查询 @Query("SELECT * FROM  article_type")
查询灵活性就很大了,可以直接里面写sql语句。很赞的是:Room可以直接判断你写的表名是否存在,还和参数值一一对应。

@Query("SELECT * FROM article_type")
List<ArticleType> getAll();@Query("SELECT * FROM article_type WHERE id = :memberId")
LiveData<ArticleType> findById(int memberId);

5、数据库创建

表的实体类在上面已经写完,接下来创建一下数据库。需要继承自RoomDatabase。

@Database(entities = {ArticleType.class,FamilyMemberType.class}, version = 1,exportSchema = true)
public abstract class AppDataBase extends RoomDatabase {public abstract ArticleTypeDao articleTypeDao();public abstract FamilyMemberType familyMemberTypeDao();public static final Migration MIGRATION_1_2 = new Migration(1, 2) {@Overridepublic void migrate(@NonNull SupportSQLiteDatabase database) {database.execSQL("ALTER TABLE article_type ADD COLUMN age INTEGER NOT NULL DEFAULT 0");}};
}

需要在创建的类的上面添加@Database注解,其中的entities是一个数组,可以添加多个类,相应的在下面可以创建多个抽象方法(多个表的情况下),以便使用。下面就是创建数据库

private AppDataBase db=null;
private ArticleTypeDao dao=null;
db = Room.databaseBuilder(this, AppDataBase.class, "room-database").build();
dao = db.articleTypeDao();
下面以查询为例:记得操作数据库,需要开启子线程
long result = dao.insert(new ArticleType(1, "李伟", 80, "今天搞活动", "http://www.image.com", "下班"));
if (result > 0) {i++;Log.i("insert_data_success", "插入了一条数据成功");
} else {Log.i("insert_data_success", "插入失败、、、");
}

参考:原文链接:https://blog.csdn.net/haojiagou/article/details/103053792

这篇关于Room数据库框架的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873089

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没