Room數據庫使用


導入依賴

def roomVersion = "2.3.0"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")

實體類

@Entity(tableName = "user" )//tableName設置表名
public class User {
    //主鍵       自增
    @PrimaryKey(autoGenerate = true)
    private int uid;
    //唯一性
    @ColumnInfo(index = true)
    private String name;
    //屬性名稱改為 "pass_word"
    @ColumnInfo(name = "pass_word")
    @NonNull
    private String passWord;

    private String tag;

    @ColumnInfo(name = "is_online")
    private Boolean isOnline;


    public User() {
    }
    //不加忽略注解會出現 There are multiple good constructors and Room will ... 問題
    @Ignore
    public User(String name, String passWord, String tag) {
        this.name = name;
        this.passWord = passWord;
        this.tag = tag;
        this.isOnline = false;
    }


    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }
......
}

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 name LIKE :name AND " + "pass_word LIKE :passWord LIMIT 1")
    User findByName(String name, String passWord);

    @Query("SELECT * FROM user WHERE is_online LIKE :online LIMIT 1")
    User findByOnline(Boolean online);

    //
    @Update
    void updateUser(User user);
    
    ////OnConflictStrategy.REPLACE:取代舊數據同時繼續事務。
    //OnConflictStrategy.ROLLBACK:回滾事務。@Deprecated
    //OnConflictStrategy.ABORT:終止事務。
    //OnConflictStrategy.FAIL:事務失敗。@Deprecated
    //OnConflictStrategy.IGNORE:忽略沖突。
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    //可以返回long別返回int會出現 Not sure how to handle insert method's return type問題
    long insert(User users);

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    void insert(User... users);

    //
    @Delete
    void delete(User user);

    @Query("DELETE  FROM user where name=:name")
    void delete(String name);
}

AppDatabase 

//Room數據庫不能在主線程中進行操作,需要新開子線程
//如果出現 Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.
//在build gradle中添加(推薦)
//
//    android {
//        ...
//        defaultConfig {
//            ...
//            javaCompileOptions {
//                annotationProcessorOptions {
//                    arguments = ["room.schemaLocation":
//                                 "$projectDir/schemas".toString()]
//                }
//            }
//        }
//    }

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

使用

AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
db.userDao().insert(new User());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM