亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android使用Room操作數據庫流程詳解

 更新時間:2022年11月17日 09:59:52   作者:Flynn_MIMD  
谷歌推薦使用Room操作數據庫,Room在 SQLite 上提供了一個抽象層,在充分利用 SQLite強大功能的同時,能夠流暢地訪問數據庫

Room的三個主要組件:

  • 數據庫類,用于保存數據庫并作為應用持久性數據底層連接的主要訪問點。
  • 數據實體,@Entity,表示數據庫中的表。
  • 數據訪問對象 (DAO),@Dao,提供查詢、更新、插入和刪除數據的方法。

build.gradle添加

dependencies {
    def room_version = "2.4.3"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" 

    implementation "android.arch.persistence.room:rxjava2:$room_version"

    testImplementation "android.arch.persistence.room:testing:$room_version"
}

1. 創(chuàng)建實體類User

@Entity(tableName = "users")
public class User {
    @PrimaryKey
    public int uid;
    @ColumnInfo(name = "first_name")
    public String firstName;
    @ColumnInfo(name = "last_name")
    public String lastName;
}

@Entity實體類,users表的名稱,不加默認user

@ColumnInfo列名

@PrimaryKey主鍵

2. 創(chuàng)建DAO

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();
    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);
    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
            "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAll(User... users);
    @Delete
    void delete(User user);
}

增,刪,改:將實例與表的主鍵進行匹配

查詢結果將自動映射到對應類型的字段,若未映射將報警告

3. 數據庫

抽象類AppDatabase 定義數據庫配置,并作為應用對持久性數據的主要訪問點,擴展了RommDataBase

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDataBase extends RoomDatabase {
    public abstract UserDao userDao();
}

4. 使用

AppDataBase db = Room.databaseBuilder(getApplicationContext(),
                        AppDataBase.class, "database-name").build();
                for (int i = 0; i < 10; i++) {
                    User user = new User();
                    user.uid = i;
                    user.firstName = "Shell" + i;
                    user.lastName = "Hub" + i;
                    db.userDao().insertAll( user);
                    List<User> userList = db.userDao().getAll();
                    for(User user1 : userList) {
                        Log.d("mip",""+user1.firstName);
                    }
                }

為了節(jié)約獲取數據庫的時間和資源,采取單例模式

簡單實現:

public class Utils {
    private static AppDataBase db = null;
    private static Context context = null;
    public static AppDataBase getDb(){
        if( db == null) {
            db = Room.databaseBuilder(context,
                    AppDataBase.class, "database-name").build();
        }
        return db;
    }
    public static void setContext(Context context){
        Utils.context = context;
    }
}

調用

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Utils.setContext(getApplicationContext());
        new Thread(new Runnable() {
            @Override
            public void run() {
                AppDataBase db = Utils.getDb();
                for (int i = 0; i < 10; i++) {
                    User user = new User();
                    user.uid = i;
                    user.firstName = "Shell" + i;
                    user.lastName = "Hub" + i;
                    db.userDao().insertAll( user);
                    List<User> userList = db.userDao().getAll();
                    for(User user1 : userList) {
                        Log.d("mip",""+user1.firstName);
                    }
                }
            }
        }).start();
    }
}

路過的大佬們有更好的單例實現請告訴我一下,

到此這篇關于Android使用Room操作數據庫流程詳解的文章就介紹到這了,更多相關Android Room內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android實現socket通信統(tǒng)一接口的方法

    Android實現socket通信統(tǒng)一接口的方法

    這篇文章主要介紹了Android實現socket通信統(tǒng)一接口?,實現了統(tǒng)一接口之后確實可以使后續(xù)修改實現更加方便,程序結構也更加工程化,需要的朋友可以參考下
    2021-12-12
  • Android百度地圖應用之圖層展示

    Android百度地圖應用之圖層展示

    這篇文章主要為大家詳細介紹了Android百度地圖應用之圖層展示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android實現九宮格橫向左右滑動

    Android實現九宮格橫向左右滑動

    這篇文章主要為大家詳細介紹了Android實現九宮格橫向左右滑動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android實現蒙板效果

    Android實現蒙板效果

    這篇文章主要為大家詳細介紹了Android實現蒙板效果的關鍵性代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android開發(fā)騰訊驗證碼遇到的坑

    Android開發(fā)騰訊驗證碼遇到的坑

    這篇文章主要介紹了Android開發(fā)騰訊驗證碼遇到的坑,需要的朋友可以參考下
    2017-12-12
  • Flutter實現圖文并茂的列表

    Flutter實現圖文并茂的列表

    列表在 App 中是最常見的形式了,在 Flutter 中提供了 ListView 這個組件來實現列表,本篇將通過 ListView 實現一個圖文并茂的列表。
    2021-05-05
  • Android用過TextView實現跑馬燈效果的示例

    Android用過TextView實現跑馬燈效果的示例

    本篇文章主要介紹了Android用過TextView實現跑馬燈效果的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android自定義控件之圓形/圓角的實現代碼

    Android自定義控件之圓形/圓角的實現代碼

    這篇文章主要為大家詳細介紹了Android自定義控件之圓形/圓角的實現代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android控件之TextView的分析探究

    Android控件之TextView的分析探究

    本篇文章介紹了,Android控件之TextView的分析探究。需要的朋友參考下
    2013-04-04
  • Android實現攝像頭拍照功能

    Android實現攝像頭拍照功能

    這篇文章主要為大家詳細介紹了Android實現攝像頭拍照功能,本文側重攝像頭拍照功能的調用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論