User 表为自动创建
Person 表 为数据库升级创建
一、创建实体类 绑定表
package com.example.myapplication.room;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "person")
public class Person {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "person_id")
private int id;
@ColumnInfo(name = "person_age")
private int age;
@ColumnInfo(name = "person_name")
private String name;
@ColumnInfo(name = "person_sex")
private String sex;
@ColumnInfo(name = "person_grade")
private String grade;
@ColumnInfo(name = "person_fraction")
private int fraction;
@ColumnInfo(name = "person_like")
private String like;
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getFraction() {
return fraction;
}
public void setFraction(int fraction) {
this.fraction = fraction;
}
}
package com.example.myapplication.room;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "user")
public class User {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "user_id")
private int id;
@ColumnInfo(name = "user_age")
private int age;
@ColumnInfo(name = "user_name")
private String name;
@ColumnInfo(name = "user_sex")
private String sex;
@ColumnInfo(name = "user_grade")
private String grade;
@ColumnInfo(name = "user_fraction")
private int fraction;
@ColumnInfo(name = "user_like")
private String like;
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getFraction() {
return fraction;
}
public void setFraction(int fraction) {
this.fraction = fraction;
}
}
二、创建接口类
package com.example.myapplication.room;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Query("SELECT * FROM user WHERE user_id IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE user_name LIKE :name")
User findByName(String name);
@Query("SELECT * FROM user WHERE user_age LIKE :age")
User findByAge(int age);
@Insert
void insertAll(User... users);
@Delete
void delete(User user);
}
package com.example.myapplication.room;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface PersonDao {
@Query("SELECT * FROM person")
List<Person> getAll();
@Query("SELECT * FROM person WHERE person_id IN (:userIds)")
List<Person> loadAllByIds(int[] userIds);
@Query("SELECT * FROM person WHERE person_name LIKE :name")
Person findByName(String name);
@Query("SELECT * FROM person WHERE person_age LIKE :age")
Person findByAge(int age);
@Insert
void insertAll(Person... persons);
@Delete
void delete(Person user);
}
三、关键的数据库操作
package com.example.myapplication.room;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;
@Database(entities = {User.class, Person.class}, version = 3)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
public abstract PersonDao personDao();
//数据库变动添加Migration
public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE user "
+ " ADD COLUMN user_like TEXT DEFAULT NULL");
}
};
public static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
//数据库的具体变动 新增person表
database.execSQL("CREATE TABLE" +
" IF NOT EXISTS person (" +
"person_age INTEGER NOT NULL DEFAULT 0, " +
"person_name TEXT DEFAULT NULL," +
"person_sex TEXT DEFAULT NULL," +
"person_grade TEXT DEFAULT NULL," +
"person_fraction INTEGER NOT NULL DEFAULT 0," +
"person_like TEXT DEFAULT NULL, " +
"person_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)");
}
};
}
四、使用
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.example.myapplication.room.AppDatabase;
import com.example.myapplication.room.Person;
import com.example.myapplication.room.User;
public class MainActivity extends AppCompatActivity {
AppDatabase db;
int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name")
.allowMainThreadQueries()//允许在主线程中查询
.addMigrations(AppDatabase.MIGRATION_1_2, AppDatabase.MIGRATION_2_3)
.build();
}
public void setUser(View view) {
i++;
User user = new User();
user.setAge(10 + i);
user.setFraction(100 + i);
user.setName("李磊" + i);
user.setGrade("二年级" + i);
user.setSex("男");
user.setLike("打球");
db.userDao().insertAll(user);
for (User us : db.userDao().getAll()) {
Log.d("tzg", "user " + us.getName() + " : " + us.getSex() + " : " + us.getId() + " : " + us.getLike());
}
Person person = new Person();
person.setAge(10 + i);
person.setFraction(100 + i);
person.setName("李磊" + i);
person.setGrade("二年级" + i);
person.setSex("男");
person.setLike("打球");
db.personDao().insertAll(person);
for (Person us : db.personDao().getAll()) {
Log.d("tzg", "person " + us.getName() + " : " + us.getSex() + " : " + us.getId() + " : " + us.getLike());
}
}
}