现在比较流行google官方的JetPack(喷气背包),这是个什么东东呢?

其实就是谷歌官方的一套工具包,提供各种工具类,因此可以部分不用第三方的开源库了,

比如:Room,Room是安卓设备SqlLite的框架,以前也用过不少类似的第三方开源框架,比如:

GreenDao、Realm;

Realm不推荐使用,真难用,谁用谁知道!

GreenDao还不错!

既然Room是大势所趋,那么学一学它该如何使用吧;

Room 持久性库  |  Android 开发者  |  Android Developers

目前最高版本是2.4.3,如果用这个版本的话,compileSdk最低要求31,这里就暂时不用最高版本,以后再用;

主module中build.gradle文件,加上依赖:

implementation 'androidx.room:room-runtime:2.1.0-alpha03'annotationProcessor 'androidx.room:room-compiler:2.1.0-alpha03'implementation 'androidx.room:room-rxjava2:2.1.0-alpha03'

数据库包结构如下:

AppDatabase.java文件(创建数据库名称、实例等):

package com.example.testgps.database;import android.content.Context;
import com.example.testgps.bean.SignRecord;
import com.example.testgps.database.dao.BasicDataDao;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;// 与表映射的实体、数据库版本
@Database(entities = {SignRecord.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {private static AppDatabase instance;public static void initial(Context context) {if (instance == null) {synchronized (AppDatabase.class) {if (instance == null) {// 创建数据库名称和实例instance = Room.databaseBuilder(context,AppDatabase.class, "database-name").build();}}}}public static AppDatabase getInstance() {return instance;}public abstract BasicDataDao basicDataDao();}

BasicDataDao.java文件(数据库表的CRUD等):

package com.example.testgps.database.dao;import com.example.testgps.bean.SignRecord;
import java.util.List;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;@Dao
public interface BasicDataDao {/*** 打卡记录表操作*/@Query("SELECT * FROM basic_sign_record")List<SignRecord> getSignRecordList();@Query("SELECT * FROM basic_sign_record WHERE sign_year_month = :sign_year_month")List<SignRecord> getSignRecordList(String sign_year_month);@Insert(onConflict = OnConflictStrategy.REPLACE)void insertSignRecord(SignRecord... item);@Query("DELETE FROM basic_sign_record")void deleteSignRecord();@Query("SELECT COUNT(*) FROM basic_sign_record")int getSignRecordCount();@Query("SELECT * FROM basic_sign_record")List<SignRecord> getAll();@Query("SELECT * FROM basic_sign_record WHERE uid IN (:userIds)")List<SignRecord> loadAllByIds(int[] userIds);//    @Query("SELECT * FROM basic_sign_record WHERE first_name LIKE :first AND " +
//            "last_name LIKE :last LIMIT 1")
//    SignRecord findByName(String first, String last);@Insertvoid insertAll(SignRecord... signRecordList);@Insertvoid insert(SignRecord signRecord);@Deletevoid delete(SignRecord signRecord);/*** 其他表操作*/}

SignRecord.java文件(实体):

package com.example.testgps.bean;import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;@Entity(tableName = "basic_sign_record")
public class SignRecord {@PrimaryKey@NonNull@ColumnInfo(name = "sign_date")public long signDate;@ColumnInfo(name = "sign_year_month")public String signYearMonth;@ColumnInfo(name = "uid")public long uid;@ColumnInfo(name = "name")public String name;@ColumnInfo(name = "sign_in_time")public long signInTime;@ColumnInfo(name = "sign_out_time")public long signOutTime;public long getSignDate() {return signDate;}public void setSignDate(long signDate) {this.signDate = signDate;}public String getSignYearMonth() {return signYearMonth;}public void setSignYearMonth(String signYearMonth) {this.signYearMonth = signYearMonth;}public long getUid() {return uid;}public void setUid(long uid) {this.uid = uid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public long getSignInTime() {return signInTime;}public void setSignInTime(long signInTime) {this.signInTime = signInTime;}public long getSignOutTime() {return signOutTime;}public void setSignOutTime(long signOutTime) {this.signOutTime = signOutTime;}
}

在自定义的Application.java文件中去初始化数据库:

public class MyApplication extends Application {public static MyApplication myApplication;@Overridepublic void onCreate() {super.onCreate();myApplication = this;AppDatabase.initial(this);}}

业务代码使用示例,其他的CRUD也是一样的操作:

new Thread(new Runnable() {@Overridepublic void run() {SignRecord signRecord = new SignRecord();signRecord.setName("小张");BasicDataDao dataDao = AppDatabase.getInstance().basicDataDao();dataDao.insertSignRecord(signRecord);}}).start();

到这里就初步实现了Room的初步使用;

注意:数据库是I/O操作,所以必须执行在子线程中;

好了,又可以愉快玩耍了。

android Room初步使用相关推荐

  1. Android TextView 初步学习

    直接设置XML Layout: <TextView android:id="@+id/text_view" android:layout_width="wrap_c ...

  2. Android adt 初步理解和分析(三)

    前面已经安装好了sdk,虽然只是下载了一个最早的1.5,但至少有一个sdk了,下面就要用模拟器来运行这个sdk里面的镜像文件了. 打开 android virtual device manager 工 ...

  3. Android 开发初步环境搭建

    1. 俗话说的好,要想功夫深,铁杵磨成针.要想武功高,马步要扎牢.在开发好的Android软件时,开发环境也是必须走入的课程.Android开发环境有很多,我就列举一下: 1)Eclipse+SDK+ ...

  4. android gdx 放进布局,Android --- libgdx android 学习初步(环境搭建及测试)

    1.首先下载libgdx文件.... 解压后会看见许多的jar文件,在Android工程中会用到gdx.jar和gdx-backend-android.jar 2.新建一个Android工程. ... ...

  5. Android ListView初步

       一.基本概念 ListView相信大家一定不陌生,用了安卓手机也有一些时间了,我发现几乎所有的应用都用到了ListView,所以可见ListView是多么重要的一个组件.但是,感觉自己对它的掌握 ...

  6. android 通知历史,Android P新特性:追踪应用通知历史

    原标题:Android P新特性:追踪应用通知历史 IT之家3月9日消息 不久前,谷歌已经正式推出了首个Android P开发者预览版,包含了许多新特性.对此,IT之家也进行了一系列报道.该系统的新特 ...

  7. Android源码中添加 修改应用

    第一部分:添加一个新的应用 1. 在和系统相同版本的SDK目录下开发自己的android应用 2. 把开发的android工程放到源码的packages/apps/目录下 3. 在工程目录下添加And ...

  8. Android阅读手札:第一行代码(第一章)

    <第一行代码>作为Android开发入门的经典书籍,是我们非常好的阅读选择,初学者可以迅速了解相关知识,老司机也可以温故知新巩固基础.笔者使用该书的第二版,也就是绿色封面的第一章节< ...

  9. 菜鸟窝Android百度云视频,菜鸟窝React Native 视频系列教程

    菜鸟窝React Native 视频系列教程 交流QQ群:276960232 Hi,我是RichardCao,现任新美大酒店旅游事业群的Android Developer.15年加入饿了么即时配送BU ...

最新文章

  1. SAP-FICO学习笔记
  2. 业务太复杂?教你如何降低软件的复杂性
  3. Linux之cut命令
  4. leecode - 入门 -- 双指针总结
  5. hive concat_w实现将多行记录合并成一行
  6. windows下支持H265的rtmp ffplay播放器 ffmpeg的编译
  7. gitLab注册There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.
  8. TVS瞬变抑制二极管选型表
  9. 蓝牙地址BD_ADDR组成
  10. tomcat报错:No such device; No faulty members identified.
  11. oracle错误信息提示中英文显示切换
  12. 算法学习:501.二叉搜索树中的众数
  13. 怎样看计算机显卡等信息,如何看电脑显卡信息 如何判断显卡性能的好坏
  14. 180-爬虫3-自动操作浏览器工具selenium模块的使用
  15. 使用weixin-java-miniapp配置进行单个小程序的配置
  16. 短视频怎么获得高流量?简单小技巧,让你的短视频被更多人看到
  17. 用了两年的电脑,它哭着对我说:“我不行了”QAQ
  18. 题解 P2285 【[HNOI2004]打鼹鼠】
  19. python+tkinter桌面时钟
  20. 公司制作宣传片的目的

热门文章

  1. matlab 遗传算法编码,【转载】一份简单的遗传算法MATLAB代码 | 古意人
  2. 智能仓库之RFID仓库管理中的条形码与电子标签应用-RFID仓库管理功能与特点-新导智能
  3. 美次贷危机对中国经济影响到底多大
  4. Adaboost算法+python源码
  5. 实战九:通过DSSM算法进行商品推荐 代码+数据 详细教程 毕业设计
  6. python实现输入Y/N执行或退出程序
  7. JasperReport不分页
  8. Unity游戏程序员面试题及解答
  9. 个性化定制企业管理系统对企业来说有什么优势?
  10. Android修改系统时间