我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android room数据库使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android room数据库使用详解

1、引入库


 def room_version = "2.3.0"
    implementation "androidx.room:room-runtime:$room_version"
    // For Kotlin use kapt instead of annotationProcessor
    annotationProcessor "androidx.room:room-compiler:$room_version"
    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"
    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

2.AppDatabase类


@Database(entities = {
        //用户信息
        UserInfo.class
        }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase instance;
 
    public static synchronized AppDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context, AppDatabase.class, 
                      //数据库存放在SD卡
                     FileUtils.getDatabasePath("test.db"))
                    //.addMigrations(MIGRATION_1_2)
                    .build();
        }
        return instance;
    }
 
    public abstract RoomDao roomDao();
 
    //进行数据库升级
    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            //在这里用sql脚本完成
            database.execSQL("alter table user add column flag integer not null default 1");
        }
    };
}

public class FileUtils {
 
    public static void deleteFile(String fileName) {
        File file = new File(fileName);
        if (file.exists())
            file.delete();
    }
 
    
    public static String getDatabasePath(String name) {
        //判断是否存在sd卡
        boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());
        if (!sdExist) {//如果不存在,
            Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");
            return null;
        } else {//如果存在
            //获取sd卡路径
            String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
            dbDir += "/database";//数据库所在目录
            String dbPath = dbDir + "/" + name;//数据库路径
            LogUtil.d("dbPath:" + dbPath);
            return dbPath;
        }
    }
}

3.用户表


@Entity(tableName = "user")
public class UserInfo extends BaseBean {
    @NonNull
    @PrimaryKey
    private String userId;
    private String name;//用户名
    private String headImg;
    private String pwd;
    private String createTime;
    @Ignore
    private boolean isSelect;
 
    public UserInfo() {
    }
 
    @Ignore
    public UserInfo(String userId, String name, String headImg, String pwd) {
        this.userId = userId;
        this.name = name;
        this.headImg = headImg;
        this.pwd = pwd;
    }
 
 
    public String getUserId() {
        return userId;
    }
 
    public void setUserId(String userId) {
        this.userId = userId;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
 
    public String getHeadImg() {
        return headImg;
    }
 
    public void setHeadImg(String headImg) {
        this.headImg = headImg;
    }
 
    public String getPwd() {
        return pwd;
    }
 
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
 
    public boolean isSelect() {
        return isSelect;
    }
 
    public void setSelect(boolean select) {
        isSelect = select;
    }
 
    public String getCreateTime() {
        return createTime;
    }
 
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
}

4.RoomDao


@Dao
public interface RoomDao {
    
    @Insert
    void insertUser(UserInfo user);
 
    //如果插入的新数据在表中已经存在,即如果遇上数据冲突的情况,新数据直接替换旧数据;
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUser(UserInfo... user);
 
    @Update
    void updateUser(UserInfo note);
 
    
    @Query("SELECT * FROM user")
    LiveData<List<UserInfo>> getUserList();
 
    
    @Query("SELECT * FROM user WHERE userId = :userId LIMIT 1")
    LiveData<UserInfo> findUserById(String userId);
}

5.Repository 


public class Repository {
 
    private final AppDatabase appDB;
 
    public Repository(Context context) {
        appDB = AppDatabase.getInstance(context);
    }
 
    
    public void insertUser(final UserInfo user) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... voids) {
                appDB.roomDao().insertUser(user);
                return null;
            }
        }.execute();
    }
 
    
    public LiveData<List<UserInfo>> getUserList() {
        return appDB.roomDao().getUserList();
    }
 
    
    public LiveData<UserInfo> findUserByName(String name) {
        return appDB.roomDao().findUserByName(name);
    }
 
    
    public LiveData<UserInfo> findUserById(String userId) {
        return appDB.roomDao().findUserById(userId);
    }
}

6.使用


Repository repository = new Repository(context);
 
 repository.getUserList().observe(this, new Observer<List<UserInfo>>() {
            @Override
            public void onChanged(List<UserInfo> userList) {
                mUserList = userList;
                LogUtil.d("mUserList个数:" + mUserList.size());
                if (mUserList.size() > 0) {
                    mAdapter.setList(userList);
                }
            }
        });

到此这篇关于Android room数据库使用的文章就介绍到这了,更多相关Android room数据库使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android room数据库使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android使用AIDL共享Room数据库

什么是AIDL: AIDL(Android Interface Definition Language),翻译成中文就是安卓接口定义语言的意思,是用于定义服务端和客户端通信接口的一种描述语言。其主要作用是IPC(Android进程间通讯),
2022-06-06

Android本地数据存储之Room详细使用

@Database:Room数据库对象。该类需要继承自RoomDatabase,通过Room.databaseBuilder()结合单例设计模式,完成数据库的创建工作。我们创建的Dao对象,在这里以抽象方法的形式返回,只需一行代码即可。

详解Android数据存储—使用SQLite数据库

SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPreference(共享首选项)、文件存储以及SQLite数据库。 SQLite数据库文件被保存在/data
2022-06-06

Android Room数据库加密的示例分析

这篇“Android Room数据库加密的示例分析”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“Android Room数据库加密的示例分析”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家
2023-06-26

Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(二)

上文,我们通过一个简单的sqlite应用实例,引入了Room,知道了Room使用的便捷和好处。然后用Room的方式,重新实现了应用实例中的场景,在这个过程中,我们结合自己已有的知识体系,从使用代码入手,对Room的实现原理,进行了猜想和
2023-08-16

Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(三)

前面两篇文章,我们一起学习了,Room引入的背景、Room的使用方式、Room的实现原理猜想验证、Room的源码原理探索总结。 本文,我们将其中牵扯到的课外知识点 or 过程中没有说到的知识点,进行一下单独的总结。 题外话:扩展知识点
2023-08-17

Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(一)

android 开发中,常见的数据存储的方式,有SharePreference、网络、Sqlite、MMKV、文件、 ContentProvider,其中,SharePreference、MMKV从简单的使用入手,到使用上的经验总结,最
2023-08-20

Android开发Jetpack组件Room使用讲解

Room是一个数据库访问组件;对SqLite数据库做了友好的封装,使我们在编码的时候,只需要注重逻辑的部分即可,数据库就交给Room去流畅的访问即可
2022-11-13

快速了解Android Room使用细则进阶

这篇文章主要为大家介绍了快速了解Android Room使用细则进阶,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-02

Android入门之使用SQLite内嵌式数据库详解

Android内带SQLite内嵌式数据库了。这对于我们存储一些更复杂的结构化数据带来了极大的便利。本文就来和大家聊聊具体的使用方法,希望对大家有所帮助
2022-12-22

Android SQLite数据库增删改查操作的使用详解

一、使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、 TEXT(字符串文本)和BLOB(二进制对象)数据类型
2022-06-06

Android 安卓数据库 sqlite android自带数据库使用

Android 安卓数据库 Android是有自带的数据库的 原生数据库 public class MySQLiteHelper extends SQLiteOpenHelper {private static final String T
2022-06-06

详解Android轻量型数据库SQLite

数据库是Android存储方案的核心,在Andorid中SQLite非常轻量,而且执行sql语句甚至比MySQL还要快。 SQLiteDatabase 是 Android 中操作数据库的核心类之一,使用SQLiteDatabase可以打开
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录