android Room初步使用
现在比较流行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初步使用相关推荐
- Android TextView 初步学习
直接设置XML Layout: <TextView android:id="@+id/text_view" android:layout_width="wrap_c ...
- Android adt 初步理解和分析(三)
前面已经安装好了sdk,虽然只是下载了一个最早的1.5,但至少有一个sdk了,下面就要用模拟器来运行这个sdk里面的镜像文件了. 打开 android virtual device manager 工 ...
- Android 开发初步环境搭建
1. 俗话说的好,要想功夫深,铁杵磨成针.要想武功高,马步要扎牢.在开发好的Android软件时,开发环境也是必须走入的课程.Android开发环境有很多,我就列举一下: 1)Eclipse+SDK+ ...
- android gdx 放进布局,Android --- libgdx android 学习初步(环境搭建及测试)
1.首先下载libgdx文件.... 解压后会看见许多的jar文件,在Android工程中会用到gdx.jar和gdx-backend-android.jar 2.新建一个Android工程. ... ...
- Android ListView初步
一.基本概念 ListView相信大家一定不陌生,用了安卓手机也有一些时间了,我发现几乎所有的应用都用到了ListView,所以可见ListView是多么重要的一个组件.但是,感觉自己对它的掌握 ...
- android 通知历史,Android P新特性:追踪应用通知历史
原标题:Android P新特性:追踪应用通知历史 IT之家3月9日消息 不久前,谷歌已经正式推出了首个Android P开发者预览版,包含了许多新特性.对此,IT之家也进行了一系列报道.该系统的新特 ...
- Android源码中添加 修改应用
第一部分:添加一个新的应用 1. 在和系统相同版本的SDK目录下开发自己的android应用 2. 把开发的android工程放到源码的packages/apps/目录下 3. 在工程目录下添加And ...
- Android阅读手札:第一行代码(第一章)
<第一行代码>作为Android开发入门的经典书籍,是我们非常好的阅读选择,初学者可以迅速了解相关知识,老司机也可以温故知新巩固基础.笔者使用该书的第二版,也就是绿色封面的第一章节< ...
- 菜鸟窝Android百度云视频,菜鸟窝React Native 视频系列教程
菜鸟窝React Native 视频系列教程 交流QQ群:276960232 Hi,我是RichardCao,现任新美大酒店旅游事业群的Android Developer.15年加入饿了么即时配送BU ...
最新文章
- 【kuangbin专题】计算几何_半平面交
- Caml Query语句的所有条件
- C++ Primer 第10章 pair类型
- 牛客网【每日一题】4月28日题目精讲 美味菜肴
- 红旗桌面版本最新运用方式和题目问题解答100例-4
- 常见问题_智能切膜机常见问题
- 担当大任者的九大特征
- MySql(16)——Spring data jpa mysql 乐观锁 与 AtomicInteger
- Qt echarts 教程(2):qt echarts 数据动态绑定
- Tcl 语言 ——语法篇
- matlab实现jpg图片转gif
- psp记忆棒测试软件,乱花渐欲迷人眼——PSP用记忆棒选购指南
- 奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想
- 到底要不要在office/wps平台上做开发
- 第一个Springboot程序
- 《社交困境》:算法抓住了人类的弱点……
- krait和kryo_为什么现在高通的kryo架构只是在arm公版架构基础上小修小补?
- 纯Go实现的Firebase的替代品 | Gopher Daily (2021.08.11) ʕ◔ϖ◔ʔ
- 信息学奥赛初赛题目讲解3
- 前端,整行英文单词超出范围,单词完整折行