Android Room 데이터베이스 다 중 테이블 조회 사용 실례

Android-Room 데이터베이스(소개)
머리말
SQLite 데이터베이스 에서 우 리 는 대상 간 의 관 계 를 지정 할 수 있 기 때문에 하나 이상 의 대상 을 하나 이상 의 다른 대상 과 연결 할 수 있 습 니 다.이른바 한 쌍 이 많 고 많은 관계 다.
기왕 표를 많이 조회 하려 면 표 사이 에 관련 이 있어 야 한다.이 럴 때 우 리 는 새로운 주해 부 를 사용 해 야 한다@ForeignKey
다음 내용 은전절의 내용 이 필요 합 니 다.

@Entity
public class Company {
  @PrimaryKey(autoGenerate = true)
  private int id;
  private String name;
  private int age;
  private String address;
  private double salary;

  public Company(String name, int age, String address, double salary) {
    this.name = name;
    this.age = age;
    this.address = address;
    this.salary = salary;
  }
  //   getter/setter  
}

다음은 그 와 관련 된 시 계 를 다시 만 듭 니 다.

@Entity(foreignKeys = @ForeignKey(entity = Company.class,parentColumns = "id",childColumns = "emp_id",onDelete = CASCADE),
    indices = @Index(value={"emp_id"},unique = true))
public class Department {
  @PrimaryKey(autoGenerate = true)
  private int id;
  private String dept;
  @ColumnInfo(name = "emp_id")
  private int empId;

  public Department(String dept, int empId) {
    this.dept = dept;
    this.empId = empId;
  }
  //   getter/setter  
}

여기 서 저 는@ForeignKey 를 사용 하여 copany 표,메 인 키 id,외 키 emp 와 연 결 했 습 니 다.id,이어서 indices 를 사용 하여 유일한 색인 을 만 들 었 습 니 다.
다음은 Dao 만 들 기 입 니 다.

@Dao
public interface CompanyDao {
  @Query("SELECT * FROM company")
  List<Company> getAllCompany();
}

@Dao
public interface DepartmentDao {
  @Query("SELECT * FROM department")
  List<Department> getAllDepartment();
  //       
  @Query("SELECT emp_id,name,dept from company INNER JOIN department ON Company.id=Department.emp_id")
  List<InnerJoinResult> getDepartmentFromCompany();
}
마지막 으로 Database 만 들 기

@Database(entities = {Department.class, Company.class}, version = 1, exportSchema = false)
public abstract class DepartmentDatabase extends RoomDatabase {
  public static final String DB_NAME = "CompanyDatabase.db";
  private static volatile DepartmentDatabase instance;

  public static synchronized DepartmentDatabase getInstance(Context context) {
    if (instance == null) {
      instance = create(context);
    }
    return instance;
  }

  private static DepartmentDatabase create(final Context context) {
    return Room.databaseBuilder(
        context,
        DepartmentDatabase.class,
        DB_NAME).allowMainThreadQueries().build();
  }

  public abstract DepartmentDao getDepartmentDao();

  public abstract CompanyDao getCompanyDao();
}

여기 서 는 여러분 들 이 이전의 글 소 개 를 통 해 잘 알 고 계 실 거 라 고 생각 합 니 다.여 기 는 설명 이 많 지 않 습 니 다.기억 이 나 지 않 습 니 다.앞의 글 을 보 세 요.
구체 적 으로 사용 하 다

    List<Company> list = new ArrayList<>();
    Company company = new Company("Paul",32,"California",20000.0);
    list.add(company);
    company = new Company("Allen",25,"Texas",15000.0);
    list.add(company);
    company = new Company("Teddy",23,"Norway",20000.0);
    list.add(company);
    company = new Company("Mark",25,"Rich-Mond",65000.0);
    list.add(company);
    company = new Company("David",27,"Texas",85000.0);
    list.add(company);
    company = new Company("Kim",22,"South-Hall",45000.0);
    list.add(company);
    company = new Company("James",24,"Houston",10000.0);
    list.add(company);

    List<Department> departmentList = new ArrayList<>();
    Department department = new Department("IT Billing",1);
    departmentList.add(department);
    department = new Department("Engineerin",2);
    departmentList.add(department);
    department = new Department("Finance",7);
    departmentList.add(department);

    DepartmentDatabase.getInstance(this)
    .getCompanyDao().insert(list);

    DepartmentDatabase.getInstance(this)
        .getDepartmentDao().insert(departmentList);

이렇게 하면 우 리 는 필요 한 데 이 터 를 데이터베이스 에 삽입 할 것 이다.다음은 우리 가 삽입 에 성 공 했 는 지 확인 해 보 자.
조회 코드 는 다음 과 같 습 니 다.

   List<Company> company = DepartmentDatabase.getInstance(this).getCompanyDao().getAllCompany();
   LogUtil.debug("Company----->" + company.size());
   for (Company result : company) {
      LogUtil.debug("result--->" + result.getName() + " " + result.getAge()+" "+result.getAddress()+" "+result.getSalary());
   }
   List<Department> department = DepartmentDatabase.getInstance(this).getDepartmentDao().getAllDepartment();
   LogUtil.debug("Department----->" + department.size());
   for (Department result : department) {
       LogUtil.debug("result--->" + result.getDept() + " " + result.getEmpId());
   }

그 러 고 보 니 삽입 에 성 공 했 군...
자,다음은 연표 조 회 를 시작 하 겠 습 니 다.
우리 가 조회 할 때,우 리 는 문제 에 부 딪 힐 것 이다.그것 은 바로 우리 가 두 개의 표를 조회 한 후의 필드 가 copany 와 departemnt 조합 후의 것 이다.그래서 여기 서 모델 클래스 를 다시 만들어 야 합 니 다.

public class InnerJoinResult {
  @ColumnInfo(name="emp_id")
  private int empId;
  private String name;
  private String dept;
  //       getter/setter  
}
위 에서 우 리 는 이미 조회 방법 을 다 썼 기 때문에 직접 호출 하면 된다.

 List<InnerJoinResult> company1 = DepartmentDatabase.getInstance(this).getDepartmentDao().getDepartmentFromCompany();
 LogUtil.debug("InnerJoinResult----->" + company1.size());
 for (InnerJoinResult result : company1) {
    LogUtil.debug("result--->" + result.getEmpId() + " " + result.getName() + " " + result.getDept());
 }
조회 결 과 는 다음 과 같 습 니 다.우리 가 여러 표 조회 에 성 공 했 음 을 설명 합 니 다.

여기까지,다 표 조회 가 끝 났 습 니 다.추 후 에는 계속 업 데 이 트 될 예정 이다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기