Room 数据库的简单实用

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());
        }
    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值