Android使用Room操作數據庫流程詳解
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 setButtonDrawable()的兼容問題解決辦法
這篇文章主要介紹了Android setButtonDrawable()的兼容問題解決辦法的相關資料,需要的朋友可以參考下2017-03-03
Android中AsyncTask異步任務使用詳細實例(一)
AsyncTask是Android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現異步操作,并提供接口反饋當前異步執(zhí)行的程度(可以通過接口實現UI進度更新),最后反饋執(zhí)行的結果給UI主線程,通過本文給大家介紹Android中AsyncTask異步任務使用詳細實例(一),需要的朋友參考下2016-02-02
Android開發(fā)基礎使用ProgressBar加載進度條示例
這篇文章主要介紹了安卓開發(fā)基礎使用ProgressBar加載進度條示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

