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
| 1.创建 Entity(数据库表) @Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) public int id;
@ColumnInfo(name = "user_name") public String name;
@ColumnInfo(name = "age") public int age; }
2.创建 Dao(数据库操作接口) @Dao public interface UserDao { @Insert void insert(User user);
@Update void update(User user);
@Delete void delete(User user);
@Query("SELECT * FROM users WHERE id = :userId") LiveData<User> getUserById(int userId);
@Query("SELECT * FROM users") LiveData<List<User>> getAllUsers(); }
3.创建 Database(数据库实例) @Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { private static volatile AppDatabase instance;
public abstract UserDao userDao();
public static AppDatabase getInstance(Context context) { if (instance == null) { synchronized (AppDatabase.class) { if (instance == null) { instance = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user_database") .fallbackToDestructiveMigration() // 处理数据库升级 .build(); } } } return instance; } }
4.在 ViewModel 里使用 Room public class UserViewModel extends AndroidViewModel { private UserDao userDao; private LiveData<List<User>> allUsers;
public UserViewModel(@NonNull Application application) { super(application); AppDatabase db = AppDatabase.getInstance(application); userDao = db.userDao(); allUsers = userDao.getAllUsers(); }
public LiveData<List<User>> getAllUsers() { return allUsers; }
public void insert(User user) { Executors.newSingleThreadExecutor().execute(() -> userDao.insert(user)); } }
5.在 Activity / Fragment 中使用 public class MainActivity extends AppCompatActivity { private UserViewModel userViewModel;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
userViewModel.getAllUsers().observe(this, users -> { // 更新 UI textView.setText("用户数:" + users.size()); });
button.setOnClickListener(v -> { User user = new User(); user.name = "张三"; user.age = 25; userViewModel.insert(user); }); } }
|