一、添加依赖
/**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工具打开保存到电脑中的文件即可