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ù)庫升級
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)建對象對象
*
* @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卡不存在,請加載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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)ImageView圖片無法顯示解決過程
在Android中ImageView無法顯示加載的本地SDCard圖片:過程為先調(diào)用本地照相機(jī)程序攝像,然后將拍攝的圖片加載在ImageView中顯示,具體解決方法如下,感興趣的朋友可以參考下哈2013-06-06
Android?IntentFilter的匹配規(guī)則示例詳解
這篇文章主要為大家介紹了Android?IntentFilter的匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android用于加載xml的LayoutInflater源碼超詳細(xì)分析
今天不想去聊一些Android的新功能,新特性之類的東西,特別想聊一聊這個(gè)老生常談的話題:LayoutInflater,感興趣的朋友來看看吧2022-08-08
android startActivityForResult的使用方法介紹
android startActivityForResult的使用方法介紹,需要的朋友可以參考一下2013-05-05
Android Studio配合WampServer完成本地Web服務(wù)器訪問的問題
這篇文章主要介紹了Android Studio配合WampServer完成本地Web服務(wù)器訪問,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能
這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
Android應(yīng)用開發(fā)中View繪制的一些優(yōu)化點(diǎn)解析
這篇文章主要介紹了Android應(yīng)用開發(fā)中View繪制的一些優(yōu)化點(diǎn)解析,包括Layout布局和硬件加速等方面,需要的朋友可以參考下2016-03-03
Android中使用listview實(shí)現(xiàn)qq/微信好友列表
本文主要介紹了android中使用listview實(shí)現(xiàn)qq/微信好友列表(頭像,昵稱,個(gè)性簽名)的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04

