@Embedded(prefix = “address_”)如果實體具有多個相同類型的嵌入字段,則可以通過設(shè)置prefix屬性使得每一個列保持唯一,把address_嵌入到列名的開頭
7.忽略成員變量
如果你不想保留某些成員變量,可以使用@Ignore注解
@Ignore//指示Room需要忽略的字段private int age;四:創(chuàng)建一個Dao接口
Dao包含用于訪問數(shù)據(jù)庫的方法,創(chuàng)建一個操作實體類用@Dao進行注解
@Insert插入語句注釋
@Delete刪除語句注釋
@Update()更新語句注釋
@Query(“SELECT * FROM user WHERE first_name=:name”)查詢語句
@Daopublic interface UserDao {/*插入數(shù)據(jù)User*/ @Insert void insert(User user); @Query("SELECT * FROMuser")//從user表中查詢所有,user是User實體類默認在Room中創(chuàng)建的表,也可以通過@Entity(tableName = "my_user"),指定表名,故這個表名就變成my_userList<User> getAllUsers(); @Query("SELECT * FROM user WHERE first_name=:name")//設(shè)置篩選條件name,來查詢這個first_name是表名first_name字段,通過@ColumnInfo(name = "first_name")來設(shè)置表字段名List<User> getUsersByName(String name);}五:創(chuàng)建一個數(shù)據(jù)庫持有者類
@Database(entities = {User.class},version = 6,exportSchema = false)public abstract class UserDatabase extends RoomDatabase {private static final String DB_NAME="UserDatabase.db"; private static volatile UserDatabase instance;//創(chuàng)建單例 public static synchronized UserDatabase getInstance(Context context){if (instance==null){instance=create(context); }return instance; } /** * 創(chuàng)建數(shù)據(jù)庫*/private static UserDatabase create(Context context) {return Room.databaseBuilder(context,UserDatabase.class,DB_NAME).allowMainThreadQueries()//允許在主線程操作數(shù)據(jù)庫,一般不推薦;設(shè)置這個后主線程調(diào)用增刪改查不會報錯,否則會報錯.fallbackToDestructiveMigration()//該方法能在升級異常重新創(chuàng)建數(shù)據(jù)庫,但所有的數(shù)據(jù)都會丟失.addMigrations(new Migration(1,4) {@Override public void migrate(@NonNull SupportSQLiteDatabase database) {database.execSQL("alter table user add price TEXT");//添加一個字段 price升級數(shù)據(jù)庫版本到4 }}).build(); }publicabstract UserDao getUserDao();//這個是必要的,創(chuàng)建DAO的抽象類}注意:
1、編譯時會檢查SQL語句是否正確
2、不要在主線程中進行數(shù)據(jù)庫操作
3、RoomDatabase最好使用單例模式
如果不設(shè)置數(shù)據(jù)庫在主線程操作的話就會報錯,錯誤提示為
故需要使用數(shù)據(jù)庫最好在new Thread().start()子線程中使用,或者Handler 或者AsyncTask或者RXJava異步實現(xiàn) 。
Room數(shù)據(jù)庫升級
//第一步修改版本號為2,要升級的版本@Database(entities = {User.class},version = 2,exportSchema = false)//第二步,添加addMigrations()添加數(shù)據(jù)庫升級 Room.databaseBuilder(context,UserDatabase.class,DB_NAME).addMigrations(new Migration(1,2) {@Override public void migrate(@NonNull SupportSQLiteDatabase database) {database.execSQL("alter table user add go TEXT");//在user 表中添加一個字段go 類型為TEXT Log.d("aa",database.getVersion()+""); }}).build();//第三步在Entity實體類User中添加屬性private String go;public String getGo() {return go;}public void setGo(String go) {this.go = go;}//這樣數(shù)據(jù)庫版本就升級到了2,就可以使用了六:Room數(shù)據(jù)庫使用
通過開辟子線程插入一條數(shù)據(jù),也可以結(jié)合RXJava和Handler和AsyncTask等異步實現(xiàn)
User user=new User();user.setAge(2223);user.setName("eees");user.setGo("wogo");new Thread(new Runnable() {@Override public void run() {UserDatabase.getInstance(NineActivity.this).getUserDao().insert(user); Log.d("TAG","插入一條數(shù)據(jù)"); }}).start();
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 細數(shù)男人增肌的健身誤區(qū)
- 戶外也能增肌的簡單動作
- 健身最簡單高效的瑜伽動作
- 目前最好用的cad版本 cad如何安裝插件的命令
- 自制拍網(wǎng)的制作視頻 個人視頻網(wǎng)站應(yīng)該怎么做
- 創(chuàng)建分區(qū)的操作步驟 win10筆記本分區(qū)步驟
- 免費的h5制作網(wǎng)站 h5表單制作教程
- 推薦口碑最好的充電寶 2021年充電寶排行榜
- 有沒有不用互聯(lián)網(wǎng)就可以拍照和搜題的方法? 拍照搜題在線使用一下
- 消防煙感探測器的作用
