Android room數(shù)據(jù)庫使用詳解
1、引入庫
def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" // For Kotlin use kapt instead of annotationProcessor annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava2 support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - RxJava3 support for Room implementation "androidx.room:room-rxjava3:$room_version"
2.AppDatabase類
@Database(entities = { //用戶信息 UserInfo.class }, version = 1, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { private static AppDatabase instance; public static synchronized AppDatabase getInstance(Context context) { if (instance == null) { instance = Room.databaseBuilder(context, AppDatabase.class, //數(shù)據(jù)庫存放在SD卡 FileUtils.getDatabasePath("test.db")) //.addMigrations(MIGRATION_1_2) .build(); } return instance; } public abstract RoomDao roomDao(); //進(jìn)行數(shù)據(jù)庫升級(jí) static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { //在這里用sql腳本完成 database.execSQL("alter table user add column flag integer not null default 1"); } }; }
public class FileUtils { public static void deleteFile(String fileName) { File file = new File(fileName); if (file.exists()) file.delete(); } /** * 獲得數(shù)據(jù)庫路徑,如果不存在,則創(chuàng)建對(duì)象對(duì)象 * * @param name */ public static String getDatabasePath(String name) { //判斷是否存在sd卡 boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState()); if (!sdExist) {//如果不存在, Log.e("SD卡管理:", "SD卡不存在,請(qǐng)加載SD卡"); return null; } else {//如果存在 //獲取sd卡路徑 String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath(); dbDir += "/database";//數(shù)據(jù)庫所在目錄 String dbPath = dbDir + "/" + name;//數(shù)據(jù)庫路徑 LogUtil.d("dbPath:" + dbPath); return dbPath; } } }
3.用戶表
@Entity(tableName = "user") public class UserInfo extends BaseBean { @NonNull @PrimaryKey private String userId; private String name;//用戶名 private String headImg; private String pwd; private String createTime; @Ignore private boolean isSelect; public UserInfo() { } @Ignore public UserInfo(String userId, String name, String headImg, String pwd) { this.userId = userId; this.name = name; this.headImg = headImg; this.pwd = pwd; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getHeadImg() { return headImg; } public void setHeadImg(String headImg) { this.headImg = headImg; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public boolean isSelect() { return isSelect; } public void setSelect(boolean select) { isSelect = select; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } }
4.RoomDao
@Dao public interface RoomDao { /** * 插入用戶 * * @param user */ @Insert void insertUser(UserInfo user); //如果插入的新數(shù)據(jù)在表中已經(jīng)存在,即如果遇上數(shù)據(jù)沖突的情況,新數(shù)據(jù)直接替換舊數(shù)據(jù); @Insert(onConflict = OnConflictStrategy.REPLACE) void insertUser(UserInfo... user); @Update void updateUser(UserInfo note); /** * 獲取所有的用戶 * * @return */ @Query("SELECT * FROM user") LiveData<List<UserInfo>> getUserList(); /** * 根據(jù)用戶名查詢用戶 * * @param userName * @return * @Query("SELECT * FROM user WHERE name = :userName LIMIT 1") LiveData<UserInfo> findUserByName(String userName); /** * 根據(jù)userId查詢用戶 */ @Query("SELECT * FROM user WHERE userId = :userId LIMIT 1") LiveData<UserInfo> findUserById(String userId); }
5.Repository
public class Repository { private final AppDatabase appDB; public Repository(Context context) { appDB = AppDatabase.getInstance(context); } /** * 插入用戶 * * @param user */ public void insertUser(final UserInfo user) { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... voids) { appDB.roomDao().insertUser(user); return null; } }.execute(); } /** * 獲取所有的用戶信息 * * @return */ public LiveData<List<UserInfo>> getUserList() { return appDB.roomDao().getUserList(); } /** * 根據(jù)用戶名查詢用戶 */ public LiveData<UserInfo> findUserByName(String name) { return appDB.roomDao().findUserByName(name); } /** * 根據(jù)userId查詢用戶 */ public LiveData<UserInfo> findUserById(String userId) { return appDB.roomDao().findUserById(userId); } }
6.使用
Repository repository = new Repository(context); repository.getUserList().observe(this, new Observer<List<UserInfo>>() { @Override public void onChanged(List<UserInfo> userList) { mUserList = userList; LogUtil.d("mUserList個(gè)數(shù):" + mUserList.size()); if (mUserList.size() > 0) { mAdapter.setList(userList); } } });
到此這篇關(guān)于Android room數(shù)據(jù)庫使用的文章就介紹到這了,更多相關(guān)Android room數(shù)據(jù)庫使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)ImageView圖片無法顯示解決過程
在Android中ImageView無法顯示加載的本地SDCard圖片:過程為先調(diào)用本地照相機(jī)程序攝像,然后將拍攝的圖片加載在ImageView中顯示,具體解決方法如下,感興趣的朋友可以參考下哈2013-06-06Android?IntentFilter的匹配規(guī)則示例詳解
這篇文章主要為大家介紹了Android?IntentFilter的匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android用于加載xml的LayoutInflater源碼超詳細(xì)分析
今天不想去聊一些Android的新功能,新特性之類的東西,特別想聊一聊這個(gè)老生常談的話題:LayoutInflater,感興趣的朋友來看看吧2022-08-08android startActivityForResult的使用方法介紹
android startActivityForResult的使用方法介紹,需要的朋友可以參考一下2013-05-05Android Studio配合WampServer完成本地Web服務(wù)器訪問的問題
這篇文章主要介紹了Android Studio配合WampServer完成本地Web服務(wù)器訪問,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能
這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Android應(yīng)用開發(fā)中View繪制的一些優(yōu)化點(diǎn)解析
這篇文章主要介紹了Android應(yīng)用開發(fā)中View繪制的一些優(yōu)化點(diǎn)解析,包括Layout布局和硬件加速等方面,需要的朋友可以參考下2016-03-03Android中使用listview實(shí)現(xiàn)qq/微信好友列表
本文主要介紹了android中使用listview實(shí)現(xiàn)qq/微信好友列表(頭像,昵稱,個(gè)性簽名)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04