Android Room 데이터베이스 다 중 테이블 조회 사용 실례
6903 단어 AndroidRoom 데이터베이스
머리말
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());
}
조회 결 과 는 다음 과 같 습 니 다.우리 가 여러 표 조회 에 성 공 했 음 을 설명 합 니 다.여기까지,다 표 조회 가 끝 났 습 니 다.추 후 에는 계속 업 데 이 트 될 예정 이다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.