Android sqllite,查询作为另一个对象属性的对象

时间:2016-04-07 03:55:28

标签: android sqlite android-sqlite

如何查询将另一个对象作为属性的对象?我还需要获取属性的值。这是我的模特:

public class Department {
 public int DeptId;
 public string DeptName;
}

public class Employee {
 public int Id;
 public string Name;
 public int DeptId;
 public Department Department;
}

我来自c#背景,我可以使用实体框架使用c#执行此操作。现在看来这个模型可以工作,但是当我为对象包含sqllite功能时,我不确定如何查询它。

这是我的第一次尝试,但我不确定这是不是最好的方法

public List<Employee> getAllEmployeesWithDepartments(){
    List<Employee> employees = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM Employee e LEFT JOIN Department d on e.DeptId = d.Id" , null);

    if(res.moveToFirst()){
        do{
            Employee emp = new Employee(); 
            emp.Id = res.getInt(res.getColumnIndex("Id"));
            emp.Name = res.getString(res.getColumnIndex("Name"));

            Department dep = new Department();
            dep.Id = res.getInt(res.getColumnIndex("Id"));
            dep.Name = res.getString(res.getColumnIndex("Name"));

            emp.Department = dep;
            employees.add(emp);
        }while (res.moveToNext());
     }
     return employees;
 }

1 个答案:

答案 0 :(得分:0)

你很困惑。 SQLite没有对象。它是一个基于表的数据库(几乎与所有数据库一样)。您可以将对象映射到表中,但您必须自己创建这些映射。由于SQLite没有对象,因此它肯定没有子对象。您通常通过在主表上使用外键约束连接另一个表来制作类似的东西,但它实际上是由您的架构定义的。你没有通用的答案。