Jetpack Room

2024-03-06 14:04
文章标签 jetpack room

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

增删改查实战代码

1.先导入依赖

 

   val roomVersion ="2.6.1"implementation("androidx.room:room-runtime:$roomVersion")annotationProcessor("androidx.room:room-compiler:$roomVersion")

2.创建实体类

package com.tiger.chapter06.entity;import androidx.room.Entity;
import androidx.room.PrimaryKey;@Entity//标注实体类 自动生成一些代码
public class BookInfo {@PrimaryKey(autoGenerate = true) //private Integer id;private String name; // 书籍名称private String author; // 作者private String press; // 出版社private Double price; // 价格public BookInfo() {}public BookInfo(Integer id, String name, String author, String press, Double price) {this.id = id;this.name = name;this.author = author;this.press = press;this.price = price;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getPress() {return press;}public void setPress(String press) {this.press = press;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}@Overridepublic String toString() {return "BookInfo{" +"id=" + id +", name='" + name + '\'' +", author='" + author + '\'' +", press='" + press + '\'' +", price=" + price +'}';}
}

3.创建Dao层接口

package com.tiger.chapter06.dao;import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;import com.tiger.chapter06.entity.BookInfo;import java.util.List;@Dao
public interface BookInfoDao {@Insertvoid  insert(BookInfo...book);@Query("delete from BookInfo")void  deleteAll();@Deletevoid  delete(BookInfo...book);@Updateint update(BookInfo...book);@Query("select * from BookInfo")List<BookInfo> queryAll();@Query("select * from BookInfo where name = :name order by id desc limit 1")BookInfo queryByName(String name);}

4.创建抽象数据库类

package com.tiger.chapter06.database;import androidx.room.Database;
import androidx.room.RoomDatabase;import com.tiger.chapter06.dao.BookInfoDao;
import com.tiger.chapter06.entity.BookInfo;//entities 表示该数据库有哪些表,version表示数据库的版本号
//exportSchema 表示是否导出数据库信息的json串,建议设为false,若设为true 还需指定json文件的保存路径
@Database(entities = {BookInfo.class},version = 1,exportSchema = true)
public abstract class BookDataBase  extends RoomDatabase {//获取该数据库中某张表的持久化对象public abstract BookInfoDao bookInfoDao();}

5.buile.gradle.kts 开启 exportSchema存储位置

  javaCompileOptions {annotationProcessorOptions {argument("room.schemaLocation","$projectDir/schemas".toString())//指定数据库导出的位置}}

6. 在Application里声明 单例实例

package com.tiger.chapter06;import android.app.Application;
import android.content.res.Configuration;
import android.util.Log;import androidx.annotation.NonNull;
import androidx.room.Room;import com.tiger.chapter06.dao.BookInfoDao;
import com.tiger.chapter06.database.BookDataBase;import java.util.HashMap;public class MyApplication extends Application {private static MyApplication mApp;public static MyApplication getInstance(){return mApp;}public HashMap<String,String> infoMap = new HashMap<>();//声明一个书籍数据库对象private BookDataBase bookDataBase;//在App启动时调用@Overridepublic void onCreate() {super.onCreate();mApp=this;Log.d("ning"," MyApplication onCreate");// 构建书籍数据库的实例bookDataBase = Room.databaseBuilder(this,BookDataBase.class,"book")//允许迁移数据库(发生数据库变更时,Room默认删除原数据库再创建新数据库。如此一来原来的记录会丢失,故而要改为迁移方式以便保存原有记录).addMigrations()//允许在主线程中操作数据库(Room默认不能在主线程中操作数据库).allowMainThreadQueries().build();}//在App终止时调用@Overridepublic void onTerminate() {super.onTerminate();Log.d("ning","onTerminate");}//在配置改变时调用,例如从竖屏变为横屏@Overridepublic void onConfigurationChanged(@NonNull Configuration newConfig) {super.onConfigurationChanged(newConfig);Log.d("ning","onConfigurationChanged");}//获取书籍数据库的实例public BookDataBase getBookDB(){return bookDataBase;}}

7.在Activity执行onCreate方法 将 Application的实例对象 放入此对象中, 实现增删改查

package com.tiger.chapter06;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;import com.tiger.chapter06.dao.BookInfoDao;
import com.tiger.chapter06.entity.BookInfo;
import com.tiger.chapter06.utils.ToastUtlis;import java.util.List;public class RoomWriteActivity extends AppCompatActivity implements View.OnClickListener {private EditText et_name;private EditText et_author;private EditText et_press;private EditText et_price;private BookInfoDao bookInfoDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_room_write);et_name = findViewById(R.id.et_name);et_author = findViewById(R.id.et_author);et_press = findViewById(R.id.et_press);et_price = findViewById(R.id.et_price);findViewById(R.id.btn_save).setOnClickListener(this);findViewById(R.id.btn_delete).setOnClickListener(this);findViewById(R.id.btn_update).setOnClickListener(this);findViewById(R.id.btn_query).setOnClickListener(this);//从App实例中获取唯一的书籍持久化对象bookInfoDao = MyApplication.getInstance().getBookDB().bookInfoDao();}@Overridepublic void onClick(View v) {String name = et_name.getText().toString();String author = et_author.getText().toString();String press = et_press.getText().toString();String price = et_price.getText().toString();if (v.getId() == R.id.btn_save){BookInfo bookInfo = new BookInfo(null, name, author, press, Double.valueOf(price));bookInfoDao.insert(bookInfo);ToastUtlis.show(this,"保存成功");}else if (v.getId() == R.id.btn_query){List<BookInfo> list = bookInfoDao.queryAll();list.forEach(b-> Log.d("ning",b.toString()));ToastUtlis.show(this,"查询成功");}else if (v.getId()==R.id.btn_delete){BookInfo bookInfo = new BookInfo();bookInfo.setId(1);bookInfoDao.delete(bookInfo);ToastUtlis.show(this,"删除成功");}else {BookInfo bookInfo = bookInfoDao.queryByName(name);bookInfo.setAuthor(author);bookInfo.setPress(press);bookInfo.setPrice(Double.valueOf(price));bookInfoDao.update(bookInfo);ToastUtlis.show(this,"修改成功");}}
}

8.页面xml layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text=" 书名:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_name"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginTop="3dp"android:layout_marginBottom="3dp"android:layout_weight="1"android:background="@drawable/edit_select"android:hint="请输入书籍名称"android:inputType="text"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_author"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text=" 作者:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_author"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginTop="3dp"android:layout_marginBottom="3dp"android:layout_weight="1"android:background="@drawable/edit_select"android:hint="请输入作者姓名"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_press"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="出版社:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_press"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginTop="3dp"android:layout_marginBottom="3dp"android:layout_weight="1"android:background="@drawable/edit_select"android:hint="请输入出版社名称"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_price"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text=" 价格:"android:textColor="@color/black"android:textSize="17sp" /><EditTextandroid:id="@+id/et_price"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginTop="3dp"android:layout_marginBottom="3dp"android:layout_weight="1"android:background="@drawable/edit_select"android:hint="请输入书籍价格"android:inputType="numberDecimal"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><Buttonandroid:id="@+id/btn_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="添加"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_delete"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_update"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="修改"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_query"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="查询"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout>

这篇关于Jetpack Room的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

【HDU】5566 Clarke and room【树链剖分+AC自动机】

题目链接:Clarke and room #include <bits/stdc++.h>using namespace std ;typedef long long LL ;#define ls ( o << 1 )#define lson ls , l , m#define rs ( o << 1 | 1 )#define rson rs , m + 1 , r#define rt

Android JetPack ViewModel 源码解析

是什么? ViewModel 用来存储页面相关的数据,当页面销毁的时候,存储数据也会清楚。但是当页面发生旋转的时候,并不会清楚数据。 怎么用? UserViewModel userViewModel = new ViewModelProvider(this).get(UserViewModel.class); UserViewModel 是自己写的ViewModel,就可以

Android JetPack Lifecycle源码解析

是什么? JetPack Lifecycle是一个页面(Activity/Fragment)生命周期的组件,当你想监听生命周期,那么就可以使用这个组件。 怎么用? 第一种: getLifecycle().addObserver(new LifecycleObserver() {@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)publi

R显卡VR性能如何?AMD发布 VRMark Cyan Room 测试结果

(52VR润饰原译文并重新进行编辑)       如果你曾通过 PC VR 头显来体验虚拟现实,你就会知道它们有能够提供一种所谓的“临场感”,亦即身临其境的感觉。如果你的PC无法及时渲染下一帧的影像,临场感就会被破坏,甚至消失。更糟糕的是,如果系统一直无法跟上,连续的掉帧将会令头显用户感到极其不舒服。为了避免这样的问题,VR规格的PC需要足够好、足够快速的CPU和GPU,以及合适

Jetpack架构组件_ViewModel组件_1.简介和示例

1.简介        ViewModel是我们MVVM中的VM层,ViewModel类似于MVP中的P层,它是我们View层和Model层之间的一个桥梁。 1.1 和MVP的P层的主要区别是: (1)ViewModel是与我们Android系统挂钩的,是官方的一个类,MV之间的一个桥梁。 (2)ViewModel还保持数据。 1.2 Android为什么要引入ViewModel?

HDU 4923 (杭电多校 #6 1003题)Room and Moor(公式+栈)

题目地址:HDU 4923 比赛的时候脑残了。。思路完全想出来了。。只不过想出了个根本不可能存在的极端数据,然后一看输入数据是100组,就把自己给否决了。。。sad。。当时就应该大胆试一试的。。。 这个题首先可以把最前面的0和最后面的1去掉,因为这两块总可以用0和1抵消掉。然后中间就分成了10相间的情况,然后根据10相间,可以分成若干组,每一组都是由几个1和几个0组成的。比如说11011011

ViewModel(6)ViewModel与Room结合进行数据库操作。

当 ViewModel 与 Room 结合使用时,可以构建出高效且架构良好的 Android 应用。 首先,创建 Room 数据库、实体、DAO 等相关组件。例如,假设有一个 User 实体表示用户信息: @Entity(tableName = "users")public class User {@PrimaryKey(autoGenerate = true)private int id;

安卓开发中的Jetpack Compose

本文内容总结自郭神的jetpack compose专栏 ,整理自学,未完持续... 一、了解Jetpack Compose         Compose是一个由Google Android团队官方推出的声明式UI框架,Compose也是属于AndroidX的一部分,它的本质就是用来编写界面以及处理与用户交互相关的逻辑的,来代替传统的View用xml来定义UI的方法。         传统

jetpack compose的@Preview和自定义主题

1.@Preview @Preview可以在 Android Studio 的预览窗口中实时查看和调试 UI 组件。 基本使用 import androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.material.MaterialThemeimport androidx.compose.material