日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Android使用Room操作數(shù)據(jù)庫(kù)流程詳解_Android

作者:Flynn_MIMD ? 更新時(shí)間: 2022-12-14 編程語(yǔ)言

Room的三個(gè)主要組件:

  • 數(shù)據(jù)庫(kù)類(lèi),用于保存數(shù)據(jù)庫(kù)并作為應(yīng)用持久性數(shù)據(jù)底層連接的主要訪(fǎng)問(wèn)點(diǎn)。
  • 數(shù)據(jù)實(shí)體,@Entity,表示數(shù)據(jù)庫(kù)中的表。
  • 數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象 (DAO),@Dao,提供查詢(xún)、更新、插入和刪除數(shù)據(jù)的方法。

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)建實(shí)體類(lèi)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實(shí)體類(lèi),users表的名稱(chēng),不加默認(rèn)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);
}

增,刪,改:將實(shí)例與表的主鍵進(jìn)行匹配

查詢(xún)結(jié)果將自動(dòng)映射到對(duì)應(yīng)類(lèi)型的字段,若未映射將報(bào)警告

3. 數(shù)據(jù)庫(kù)

抽象類(lèi)AppDatabase 定義數(shù)據(jù)庫(kù)配置,并作為應(yīng)用對(duì)持久性數(shù)據(jù)的主要訪(fǎng)問(wèn)點(diǎn),擴(kuò)展了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é)約獲取數(shù)據(jù)庫(kù)的時(shí)間和資源,采取單例模式

簡(jiǎn)單實(shí)現(xiàn):

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;
    }
}

調(diào)用

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();
    }
}

路過(guò)的大佬們有更好的單例實(shí)現(xiàn)請(qǐng)告訴我一下,

原文鏈接:https://blog.csdn.net/weixin_45369680/article/details/127866214

欄目分類(lèi)
最近更新