9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習電腦 > 網絡知識 > 網絡技術 >

Android-Room數據庫的使用方法教程

時間: 加城1195 分享

  Room是一個持久性數據庫,提供了SQLite的抽象層,以便在充分利用SQLite的同時允許流暢的數據庫訪問。這篇文章主要介紹了詳細介紹Android-Room數據庫的使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。

  為什么會選擇Room?

  前面我也說到了現在也有不少開源的數據庫給大家使用,那為什么我們還要去學習使用這個庫呢?當然不是我前面說的“正不正統”的原因了。

  因為Room有下面幾個優點:

  ① SQL查詢在編譯時就會驗證 - 在編譯時檢查每個@Query和@Entity等,這就意味著沒有任何運行時錯誤的風險可能會導致應用程序崩潰(并且它不僅檢查語法問題,還會檢查是否有該表)

  ② 較少的模板代碼

  ③ 與 LiveData 集成

  該如何使用它?

  1、在app/build.gradle中添加以下依賴

  implementation 'android.arch.persistence.room:runtime:1.0.0'

  annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'

  你可以點擊這里查看最新依賴版本號

  2、創建JavaBean

  @Entity

  public class User {

  @PrimaryKey(autoGenerate = true)//主鍵是否自動增長,默認為false

  private int id;

  private String name;

  private int age;

  public int getId() {

  return id;

  }

  public void setId(int id) {

  this.id = id;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  //這里的getter/setter方法是必須的

  }

  這里需要使用 @Entity 來注解該類

  至少要有一個主鍵 @PrimaryKey

  3、創建Dao

  接下來,需要為我們的實體創建DAO。 DAO代表數據訪問對象,所以它是告訴我們的數據庫如何操作數據的一種方式:

  @Dao

  public interface UserDao {

  @Query("SELECT * FROM user")

  List getAllUsers();

  @Insert

  void insert(User... users);

  @Update

  void update(User... users);

  @Delete

  void delete(User... users);

  }

  使用 @Dao 注解該接口

  @Insert , @Update , @Delete , @Query 代表我們常用的 插入 、 更新 、 刪除 、 查詢 數據庫操作

  @Insert , @Update , @Delete 可以傳入多種不同的參數。例如:

  @Insert

  void insert(User... users);

  @Insert

  void insert(User user);

  @Insert

  void insert(List userLists);

  同理, @Query 也可以返回多種不同的類型。

  @Query("SELECT * FROM user")

  List getAllUsers();

  @Query("SELECT * FROM user WHERE id=:id")

  User getUser(int id);

  @Query("SELECT * FROM user")

  Cursor getUserCursor();

  當然,除了這些我們還可以傳入一些限制符進去。例如,

  @Query("SELECT * FROM user WHERE age=:age")

  List getUsersByAge(int age);

  @Query("SELECT * FROM user WHERE age=:age LIMIT :max")

  List getUsersByAge(int max, int... age);

  4、創建數據庫

  @Database(entities = { User.class }, version = 1,exportSchema = false)

  public abstract class UserDatabase extends RoomDatabase {

  private static final String DB_NAME = "UserDatabase.db";

  private static volatile UserDatabase instance;

  static synchronized UserDatabase getInstance(Context context) {

  if (instance == null) {

  instance = create(context);

  }

  return instance;

  }

  private static UserDatabase create(final Context context) {

  return Room.databaseBuilder(

  context,

  UserDatabase.class,

  DB_NAME).build();

  }

  public abstract UserDao getUserDao();

  }

  這里使用 @Database 注解該類并添加了 表名 、 數據庫版本 (每當我們改變數據庫中的內容時它都會增加),所以這里使用 exportSchema = false

  注意:除了添加表映射的類以及和數據庫版本外,還要添加 exportSchema = false 否則會報警告。

  Error:(10, 17) 警告: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.

  我們抽象了 getUserDao() 方法,這是必要的。

  5、使用數據庫

  我們終于能夠操作我們的數據庫了。但是所有的操作必須在后臺線程中完成。你可以通過使用 AsyncTask , Thread , Handler , RxJava 或其它方式來完成。

  如果沒有在后臺線程執行,并且也沒有說明可以在主線程操作的話,就會報以下錯誤。

  Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

  例如,我們可以像下面這樣插入數據

  User user=new User();

  user.setName("name1");

  user.setAge(18);

  UserDatabase

  .getInstance(context)

  .getUserDao()

  .insert(user);

  或者這樣

  List allUsers = UserDatabase

  .getInstance(RoomActivity.this)

  .getUserDao()

  .getAllUsers();

  好了,基本的使用的方式就這些了。

  補充:MySQL 數據庫常用命令

  create database name; 創建數據庫

  use databasename; 進入數據庫

  drop database name 直接刪除數據庫,不提醒

  show tables; 顯示表

  describe tablename; 查看表的結構

  select 中加上distinct去除重復字段

  mysqladmin drop databasename 刪除數據庫前,有提示。

  顯示當前mysql版本和當前日期

  select version(),current_date;

  數據庫維護方法

  在MySQL使用的過程中,在系統運行一段時間后,可能會產生碎片,造成空間的浪費,所以有必要定期的對MySQL進行碎片整理。

  當刪除id=2的記錄時候,發生的現象

  這個時候發現磁盤的空間并沒有減少。這種現象就叫做碎片化(有一部分的磁盤空間在數據刪除以后(空),還是無法被操作系統所使用。)

  常見的優化:

  # alter table xxx engine myisam;

  # optimize table t1;

  注意: 在實際開發的過程中,上面兩個語句盡量少使用,因為在使用的過程中,MySQL的表的結構會整體全部重新整理,需要消耗很多的資源,建議在凌晨兩三點鐘的時候執行。(在linux下有定時器腳本可以執行,crontab)


數據庫相關文章:

1.excel怎么將表格連入數據庫

2.把Excel數據導入到數據庫的方法

3.數據庫中default的用法

4.linux下mysql關閉數據庫命令行

5.excel數據導入SQL數據庫的教程

4015367 主站蜘蛛池模板: 亚洲色最新高清AV网站| 国内极度色诱视频网站| 久久一区二区中文字幕| 蜜桃在线一区二区三区| 国产精品青草久久久久福利99 | 99热门精品一区二区三区无码| 美女内射福利大全在线看| 午夜男女爽爽影院在线| 亚洲中文字幕无码不卡电影| 国产成人综合色视频精品| 亚洲人成人伊人成综合网无码| 久久av中文字幕资源网| 久久先锋男人AV资源网站| 国产人妻精品午夜福利免费| 五月天中文字幕mv在线| 国产成人综合久久亚洲av| 国产精品一区二区中文| 亚洲av激情综合在线| 国产欧美日韩免费看AⅤ视频| 激情综合网激情激情五月天 | 在线视频不卡在线亚洲| 最新成免费人久久精品| 久久精品国产国产精品四凭| av午夜福利一片免费看久久| 青青草一区在线观看视频| 国产亚洲制服免视频| 精品精品久久宅男的天堂| 亚洲色一色噜一噜噜噜| 人妻无码不卡中文字幕系列| 国产首页一区二区不卡| 国产极品视频一区二区三区 | 熟女视频一区二区三区嫩草 | 成A人片亚洲日本久久| 麻豆久久久9性大片| 国产精品大片中文字幕| 免费99精品国产人妻自在现线| 99久久99久久久精品久久| 国产精品一二三区视在线| 国产精品成人午夜久久| 国产a级三级三级三级| 亚洲av一本二本三本|