现在比较流行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. 【kuangbin专题】计算几何_半平面交
  2. Caml Query语句的所有条件
  3. C++ Primer 第10章 pair类型
  4. 牛客网【每日一题】4月28日题目精讲 美味菜肴
  5. 红旗桌面版本最新运用方式和题目问题解答100例-4
  6. 常见问题_智能切膜机常见问题
  7. 担当大任者的九大特征
  8. MySql(16)——Spring data jpa mysql 乐观锁 与 AtomicInteger
  9. Qt echarts 教程(2):qt echarts 数据动态绑定
  10. Tcl 语言 ——语法篇
  11. matlab实现jpg图片转gif
  12. psp记忆棒测试软件,乱花渐欲迷人眼——PSP用记忆棒选购指南
  13. 奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想
  14. 到底要不要在office/wps平台上做开发
  15. 第一个Springboot程序
  16. 《社交困境》:算法抓住了人类的弱点……
  17. krait和kryo_为什么现在高通的kryo架构只是在arm公版架构基础上小修小补?
  18. 纯Go实现的Firebase的替代品 | Gopher Daily (2021.08.11) ʕ◔ϖ◔ʔ
  19. 信息学奥赛初赛题目讲解3
  20. 前端,整行英文单词超出范围,单词完整折行

热门文章

  1. java memento_memento模式_Java中的Memento设计模式-示例教程
  2. 在线编辑office文档笔记
  3. 【知乎高问】如何看待2021年的秋招算法岗灰飞烟灭!
  4. 2007年高考信息题
  5. 我严重讽刺了韩国KBS电视台的记者
  6. 图像处理特征不变算子系列之DoG算子(五)
  7. 频繁爬取天涯的帖子会不会被抓_web爬虫-搞一波天涯论坛帖子练练手
  8. 一切从零开始(系统)
  9. 阿里P7大佬手把手教你!腾讯团队实力打造flutter入门教程,系列篇
  10. 微信小程序使用echarts图表(ec-canvas)