Android_数据库_Room的基本使用

1、导包:

implementation "androidx.room:room-runtime:2.2.3"
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

2、添加数据库

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class MyDataBase extends RoomDatabase {

    public abstract UserDao getUserDao();

}

3、Application里面初始化

public class AppContext extends Application {

    public static MyDataBase myDataBase;

    @Override
    public void onCreate() {
        super.onCreate();
        initDataBase();
    }

    /* 初始化 数据库 */
    private void initDataBase() {
        Log.v("fwling", "初始化数据库");
        myDataBase = Room.databaseBuilder(getApplicationContext(), MyDataBase.class, "User.db")
                .build();
    }
}

4、建立实体类(get和set方法一定要加上)

@Entity(tableName = "Users")
public class User {

    @NonNull
    @PrimaryKey
    @ColumnInfo(name = "UserId")
    private String uuid;

    @ColumnInfo(name = "UserName")
    private String userName;

    @ColumnInfo(name = "Date")
    private String date;

    @Ignore
    public User(String userName) {
        this.uuid = UUID.randomUUID().toString();
        this.userName = userName;
        this.date = SimpleDateFormat.getDateInstance().format(new Date(System.currentTimeMillis()));
    }

    public User(String uuid, String userName, String date) {
        this.uuid = uuid;
        this.userName = userName;
        this.date = date;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}

5、添加UserDao

@Dao
public interface UserDao {

    @Query("SELECT * FROM Users")
    List<User> getUsers();

    @Insert
    void addUser(User user);

    @Insert
    void addAll(List<User> userList);

    @Delete
    int deleteUser(User user);

    @Update
    int updateUser(User user);


}

6、使用

获取数据
List<Fruit> users = AppContext.myDataBase.getFruitDao().getFruits();

插入数据
User user = new User(et.getText().toString());
AppContext.myDataBase.getUserDao().addUser(user);

需要注意的是:数数据库所有的操作都需要在子线程种运行。这里可以配合RxJava来使用

数据库的操作就到这里,结束了。

下面来看一下数据库的升级管理

此次升级,增加了一张Fruit表

1、添加

@Database(entities = {User.class, Fruit.class}, version = 2, exportSchema = false)
public abstract class MyDataBase extends RoomDatabase {

    /* 升级数据库的方法 -- 当前为从 版本1 升级到 版本2 */
    public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            // 这里新创建一个Fruit表
            database.execSQL("CREATE TABLE `Fruit` (`FruitId` INTEGER NOT NULL, "
                    + "`FruitName` TEXT, PRIMARY KEY(`FruitId`))");

        }
    };

    public abstract UserDao getUserDao();

    public abstract FruitDao getFruitDao();
}


需要变化的点:
1、表,entities 的注解里面多了一个Fruit表
2、版本号+1 =2
3、添加了一个Migration 、MIGRATION_1_2表示从1升到2的时候需要做的所有操作
4、添加了一个新表对应的FruitDao

2、添加实体类和相应的Dao

实体类:
@Entity(tableName = "Fruit")
public class Fruit {

    @NonNull
    @PrimaryKey
    @ColumnInfo(name = "FruitId")
    private Integer FruitId;

    @ColumnInfo(name = "FruitName")
    private String FruitName;

    public Fruit() {
        this.FruitName = "default_Fruit_Name";
    }

    @Ignore
    public Fruit(String FruitName) {
        this.FruitName = FruitName;
    }

    @NonNull
    public Integer getFruitId() {
        return FruitId;
    }

    public void setFruitId(@NonNull Integer fruitId) {
        FruitId = fruitId;
    }

    public String getFruitName() {
        return FruitName;
    }

    public void setFruitName(String fruitName) {
        FruitName = fruitName;
    }
}

DAO:
@Dao
public interface FruitDao {

    @Query("SELECT * FROM Fruit")
    List<Fruit> getFruits();

    @Insert
    void addFruit(Fruit fruit);
}

3、添加升级操作

public class AppContext extends Application {

    public static MyDataBase myDataBase;

    @Override
    public void onCreate() {
        super.onCreate();
        initDataBase();
    }

    /* 初始化 数据库 */
    private void initDataBase() {
        Log.v("fwling", "初始化数据库");
        myDataBase = Room.databaseBuilder(getApplicationContext(), MyDataBase.class, "User.db")
                .addMigrations(MyDataBase.MIGRATION_1_2)
                .build();
    }
}

多了一行:.addMigrations(MyDataBase.MIGRATION_1_2)

  

猜你喜欢

转载自www.cnblogs.com/fwling/p/12502497.html