Android Room数据库简介

一、添加依赖

    /**Room 数据库所需依赖**/
    //def room_version="2.4.2"
    def room_version = "2.3.0"
    //Room数据库的依赖
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

二、创建Entity和Dao

Entity类:

/**
 * 创建表
 * */
@Entity(tableName = "user")// 设置表名
public class User {
    @NonNull    //主键不能为null,必须添加这个注解
    @PrimaryKey(autoGenerate = true)    //主键是否自动增长,默认为false
    private int userId;// userId

    @ColumnInfo(name = "user_name")     //可以通过设置name =xxx 的方式重新命名字段
    private String userName;// 姓名
    @ColumnInfo(name = "user_age")
    private int userAge;// 年龄
    @ColumnInfo(name = "user_sex")
    private String userSex;// 性别

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

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

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }
}

Dao类:

@Dao
public interface UserDao {

    /**
     * 插入数据
     * */
    @Insert
    Long insertData(User user);

    /**
     * 删除数据
     * */
    @Delete
    void deleteData(User user);

    /**
     * 修改
     * @param user 根据用户进行修改
     */
    @Update
    void updateData(User user);

    /**
     * 根据多个 id 查询多条数据
     * */
    @Query("SELECT * FROM user WHERE userId IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    /**
     * 根据 id 查询单条数据
     * */
    @Query("SELECT * FROM user where userId = :id")	//此冒号后的id即为此方法传入的参数
    User getById(int id);

    /**
     * 查询全部数据
     * */
    @Query("SELECT * FROM user")
    List<User> getAll();



}

三、创建数据库类

/**
 * 数据库工具类
 *
 * @Database 注解是对于数据库的操作
 *
 * entities = {实体类(多个可以用逗号分割)},例:entities = {User1.class,User2.class}
 * version 数据库版本
 *
 * exportSchema 若该注解后面不加“exportSchema = false”,该属性默认为true,则表示导出数据库的概要和记录,
 * 建议默认设置导出,方便查看历史更改记录,
 * 这个时候要在app/build.gradle下的defaultConfig中要增加如下配置,不然编译会报错
 */
@Database(entities = {User.class},version = 1,exportSchema = true)
public abstract class MyDatabase extends RoomDatabase {
    private static final String DATABASE_NAME = "BASE_DATA";// 数据库名称
    /**
     * 设置单例
     * */
    private static MyDatabase myInstance;

    public static MyDatabase getInstance(Context context){
        if (myInstance == null){
            synchronized (MyDatabase.class){
                if (myInstance == null){
                    //三个参数:第一个Context对象,第二个为数据库类,第三个为数据库名字
                    myInstance = Room.databaseBuilder(context,MyDatabase.class,DATABASE_NAME)
                            //是否允许在主线程上操作数据库,默认false。
                            .allowMainThreadQueries()
                            // setJournalMode(@NonNull JournalMode journalMode)  设置数据库的日志模式
                            // 设置迁移数据库如果发生错误,将会重新创建数据库,而不是发生崩溃
                            // .fallbackToDestructiveMigration() 会清理表中的数据 ,不建议这样做
                            //设置从某个版本开始迁移数据库如果发生错误,将会重新创建数据库,而不是发生崩溃
                            //.fallbackToDestructiveMigrationFrom(int startVersions);
                            /*.addCallback(new Callback() {	进行数据库的打开合创建的监听
                                @Override
                                public void onCreate(@NonNull SupportSQLiteDatabase db) {
                                    super.onCreate(db);
                                }

                                @Override
                                public void onOpen(@NonNull SupportSQLiteDatabase db) {
                                    super.onOpen(db);
                                }
                            }) */
                            .build();

                }
            }
        }
        return myInstance;
    }

    /**
     * 创建UserDao抽象类
     * */
    public abstract UserDao userDao();


}

四、创建数据库管理类

/**
 * 数据库管理类
 * */
public class DBManager {

    private static  Context context;

    /**
     * 无参构造函数
     * */
    public DBManager(){}

    public static DBManager sInstance;
    /**
     * 单例模式
     * */
    public static DBManager getInstance(Context context) {
        DBManager.context = context;
        if (sInstance == null) {
            synchronized (DBManager.class) {
                if (sInstance == null) {
                    sInstance = new DBManager();
                }
            }
        }
        return sInstance;
    }


    /**
     * 插入数据
     * */
    public Long insert (User user){
        Long l = MyDatabase.getInstance(context).userDao().insertData(user);

        return l;
    }

    /**
     * 删除数据
     * */
    public void deleate(User user){
        MyDatabase.getInstance(context).userDao().deleteData(user);

    }

    /**
     * 修改数据
     * */
    public void updata(final User user){
        MyDatabase.getInstance(context).userDao().updateData(user);
    }

    /**
     * 根据ids查询数据
     * */
    public List<User> queryAllByIds(final int[] userIds){
        List<User> users = MyDatabase.getInstance(context).userDao().loadAllByIds(userIds);

        return users;
    }

    public User queryById(int id){
        User user = MyDatabase.getInstance(context).userDao().getById(id);

        return user;
    }

    /**
     * 查询全部数据
     * */
    public List<User> queryAll(){
        List<User> users = MyDatabase.getInstance(context).userDao().getAll();

        return users;
    }


}

使用方法:

// 获取数据库管理类对象
dbManager = DBManager.getInstance(this);

添加数据:

 User addUser = new User();
 addUser.setUserName("张三");
 addUser.setUserAge(20);
 addUser.setUserSex("男");

 dbManager.insert(addUser);

删除数据:

 User delUser = new User();
 delUser.setUserId(6);

 dbManager.deleate(delUser);

修改数据:

User updateUser = new User();
updateUser.setUserId(5);
updateUser.setUserName("李四");

dbManager.updata(updateUser);

查询数据:

  // 查询全部数据
List<User> users = dbManager.queryAll();
System.out.println(users);

五、导出数据库并使用

(1)通过Android Sutdio 找到数据库文件

(2)选中database文件下的全部文件右键,选中Save As...

(3)在电脑中找到对应文件夹下的文件

电脑中保存的文件

 (4)使用SQLiteExpertPro工具打开保存到电脑中的文件即可

猜你喜欢

转载自blog.csdn.net/qq_19688207/article/details/130030791