我正在使用学生和类(class)创建简单的数据库。

我创建了两个实体以及与 View 模型的多对多关系。

但是,我注意到两者的ID都没有增加。

@Entity(tableName = "students")
class Student(
    val name: String,
    val lastName: String
) {
    @PrimaryKey(autoGenerate = true) var id: Int = 0
}

这是表创建的结果:
        val student = Student("Daniele", "[email protected]")
        val student2 = Student("Daniele", "[email protected]")

        Log.d("test", "student Id : ${student.id}")
        Log.d("test", "student Id : ${student2.id}")
        student Id : 0 student Id : 0

最佳答案

编码 :-

    val student = Student("Daniele", "[email protected]")
    val student2 = Student("Daniele", "[email protected]")

    Log.d("test", "student Id : ${student.id}")
    Log.d("test", "student Id : ${student2.id}")
    student Id : 0 student Id : 0

没有从数据库中得到任何东西。它正在创建2个Student对象(so id为0)并打印它们。

您应该将学生插入数据库中并对其进行测试,以通过定义为相应@Dao类一部分的函数将其提取。

例如,假设StudentDao接口(interface)为:-
@Dao
interface StudentDao {

    @Insert
    fun insert(student: Student) :Long

    @Query("SELECT * FROM students")
    fun getAllStudents() :List<Student>
}
  • 允许插入学生并提取学生列表
  • 注意,数据库类需要在@Database中包括entities = {Student.class},还需要包括abstract StudentDao studentDao();

  • 然后,在构建数据库之后,在这种情况下,可以使用一个名为mDB的数据库对象(请注意,该构建使用.allowMainThreadQueries,为了方便起见,以下内容在Java中也是如此):-
    mDB.studentDao().insert(new Student("Fred","Bloogs"));
    mDB.studentDao().insert(new Student("Mary","Smith"));
    List<Student> studentList = mDB.studentDao().getAllStudents();
    for (Student s: studentList) {
        Log.d("STUDENTINFO", "ID=" + s.getId() + " Name = " + s.getName() + " " + s.getLastName());
    }
    

    即,将2个学生添加到数据库中,然后提取学生,得出:-
    2019-11-29 00:30:15.568 D/STUDENTINFO: ID=1 Name = Fred Bloogs
    2019-11-29 00:30:15.568 D/STUDENTINFO: ID=2 Name = Mary Smith
    

    我相信Kotlin中的上述代码等效于:-
        mDB.StudentDao().insert(Student("Fred","Bloggs"))
        mDB.StudentDao().insert(Student("Mary","Smith"))
        val studentsList = mdb.StudentDao().getAllStudents()
        for (s :Student in studentsList) {
            Log.d("STUDENTINFO","ID= ${s.id} Name = ${s.name} ${s.lastName}" )
        }
    

    10-08 07:01