我正在使用学生和类(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>
}
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}" )
}