前言
Android Room 学习笔记
使用Room可以简化SQLite数据库的创建和对数据的增删改查
引入依赖
/app/build.gradle
1 2 3 4 5 6 7 8
| dependencies {
... def room_version = "2.2.0-alpha01" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" }
|
创建实体类
- 根据需要操作的数据表结构创建对应的实体类,实体类上使用
@Entity
注解标注
@PrimaryKey
:定义主键
@PrimaryKey(autoGenerate = true)
:定义主键自增
/app/src/main/java/…/pojo/User.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| @Entity public class User {
@PrimaryKey(autoGenerate = true) private Integer _id; private String username; private String password;
public User(String username, String password) { this.username = username; this.password = password; }
public Integer get_id() { return _id; }
public void set_id(Integer _id) { this._id = _id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
@Override public String toString() { return "User{" + "_id=" + _id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
|
创建Dao接口
- 创建Dao接口,定义增删改查抽象方法,可以使用
@Query
注解手动指定SQL语句
/app/src/main/java/…/dao/UserDao.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Dao public interface UserDao {
@Insert void insertUser(User ... users);
@Delete void deleteUser(User ... users);
@Update void updateUser(User ... users);
@Query("SELECT * FROM user") List<User> getAllUsers();
}
|
创建Database类
- 创建Database抽象类,使用单例模式实例化数据库对象
.allowMainThreadQueries()
:强制开启主线程也可以操作数据库,一般在测试时使用
/app/src/main/java/…/UserDatabase.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Database(entities = {User.class}, version = 1, exportSchema = false) public abstract class UserDatabase extends RoomDatabase {
public abstract UserDao getUserDao();
private static UserDatabase instance; public static synchronized UserDatabase getInstance(Context context) { if (instance == null) { instance = Room.databaseBuilder( context.getApplicationContext(), UserDatabase.class, "user_database" ) .build(); } return instance; }
}
|
自定义数据库引擎类
/app/src/main/java/…/DBEngine.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| public class DBEngine {
private UserDao userDao;
public DBEngine(Context context) { UserDatabase userDatabase = UserDatabase.getInstance(context); userDao = userDatabase.getUserDao(); }
public void insertUsers(User ... users) { new InsertAsyncTask(userDao).execute(users); }
static class InsertAsyncTask extends AsyncTask<User, Void, Void> {
private UserDao userDao;
public InsertAsyncTask(UserDao userDao) { this.userDao = userDao; }
@Override protected Void doInBackground(User... users) { userDao.insertUsers(users); return null; } }
public void updateUsers(User ... users) { new InsertAsyncTask(userDao).execute(users); }
static class UpdateAsyncTask extends AsyncTask<User, Void, Void> {
private UserDao userDao;
public UpdateAsyncTask(UserDao userDao) { this.userDao = userDao; }
@Override protected Void doInBackground(User... users) { userDao.updateUsers(users); return null; } }
public void deleteUsers(User ... users) { new InsertAsyncTask(userDao).execute(users); }
static class DeleteAsyncTask extends AsyncTask<User, Void, Void> {
private UserDao userDao;
public DeleteAsyncTask(UserDao userDao) { this.userDao = userDao; }
@Override protected Void doInBackground(User... users) { userDao.deleteUsers(users); return null; } }
public void deleteAllUsers(User ... users) { new InsertAsyncTask(userDao).execute(users); }
static class DeleteAllAsyncTask extends AsyncTask<Void, Void, Void> {
private UserDao userDao;
public DeleteAllAsyncTask(UserDao userDao) { this.userDao = userDao; }
@Override protected Void doInBackground(Void... voids) { userDao.deleteAllUsers(); return null; } }
public void selectAllUsers(User ... users) { new InsertAsyncTask(userDao).execute(users); }
static class SelectAllAsyncTask extends AsyncTask<Void, Void, Void> {
private UserDao userDao;
public SelectAllAsyncTask(UserDao userDao) { this.userDao = userDao; }
@Override protected Void doInBackground(Void... voids) { List<User> users = userDao.selectAllUsers(); for (User user : users) { user.toString(); } return null; } } }
|
调用引擎类实现增删改查
/app/src/main/java/…/MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class MainActivity extends AppCompatActivity {
DBEngine dbEngine;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
dbEngine = new DBEngine(this);
User zhangsan = new User("zhangsan", "123456"); dbEngine.insertUsers(zhangsan);
zhangsan.set_id(0); dbEngine.updateUsers(zhangsan);
User user = new User(); dbEngine.deleteUsers(user);
dbEngine.deleteAllUsers();
dbEngine.selectAllUsers();
} }
|
完成
参考文献
哔哩哔哩——Android架构解析