亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

常見的數(shù)據(jù)庫管理系統(tǒng) android 數(shù)據(jù)庫操作( 二 )


@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)容,希望對您有所幫助: