Как вернуть идентификатор вставки из базы данных комнатыJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Как вернуть идентификатор вставки из базы данных комнаты

Сообщение Гость »


Я использую базу данных комнаты с mvvm. Я хочу получить идентификатор, когда пользователь добавляет новый элемент в базу данных комнаты. я использую Исполнителей вместо aysncTask (устарело). это то, что я использую сейчас.

Студент.java

пакет Ask2784.studentsdetails; импортировать androidx.recyclerview.widget.DiffUtil; импортировать androidx.room.ColumnInfo; импортировать androidx.room.Entity; импортировать androidx.room.Игнорировать; импортировать androidx.room.PrimaryKey; @Entity(tableName = "students_table") Студент публичного класса { @PrimaryKey(autoGenerate = true) частный длинный идентификатор; @ColumnInfo(name = «имя») частное имя строки; @ColumnInfo(name = "имя_отца") частная строка FatherName; @ColumnInfo(name = "имя_класса") частная строка className; @ColumnInfo(name = «attendens», defaultValue = «0») частные международные посетители; @ColumnInfo(name = «total_presents», defaultValue = «0») частный int TotalPresents; @Игнорировать публичный студент() {} public Student (имя строки, имя отца строки, имя класса строки) { это.имя = имя; это.имя_отца = Имя_отца; это.ИмяКласса = ИмяКласса; } общественный длинный getId() { вернуть этот.id; } общественный недействительный setId (длинный идентификатор) { this.id = идентификатор; } публичная строка getName() { вернуть это.имя; } public void setName (имя строки) { это.имя = имя; } общественная строка getFatherName() { вернуть это.имя_отца; } public void setFatherName (String FatherName) { это.имя_отца = Имя_отца; } публичная строка getClassName() { вернуть это.имякласса; } public void setClassName (String className) { это.ИмяКласса = ИмяКласса; } public int getAttendens() { верните this.attendens; } public void setAttendens(int посещает) { this.attendens = посещающие; } public int getTotalPresents() { вернуть это.totalPresents; } public void setTotalPresents(int totalPresents) { this.totalPresents = totalPresents; } @Override общедоступное логическое значение равно (Объект o) { if (this == o) возвращает true; if (o == null || getClass() != o.getClass()) возвращает false; Студент Студент = (Студент) o; вернуть getName().equals(student.getName()) && getFatherName().equals(student.getFatherName()) && getClassName().equals(student.getClassName()) && getAttendens() == Student.getAttendens() && getTotalPresents() == Student.getTotalPresents(); } public static DiffUtil.ItemCallback DIFF_CALLBACK = новый DiffUtil.ItemCallback() { @Override public boolean areItemsTheSame(Student oldStudent, Student newStudent) { return oldStudent.getId() == newStudent.getId(); } @Override public boolean areContentsTheSame(Student oldStudent, Student newStudent) { вернуть oldStudent.equals(newStudent); } }; } StudentDao.java

пакет Ask2784.studentsdetails; импортировать androidx.lifecycle.LiveData; импортировать androidx.room.Dao; импортировать androidx.room.Delete; импортировать androidx.room.Insert; импортировать androidx.room.Query; импортировать androidx.room.Update; импортировать java.util.List; @Дао публичный интерфейс StudentDao { @Вставлять void Insert(Студент); @Обновлять недействительное обновление (Студент); @Удалить void delete (Студент); @Query("УДАЛЕНИЕ ИЗ таблицы_студентов") недействительный удалитьВсе(); @Query("ВЫБРАТЬ * ИЗ таблицы_студентов ORDER BY по имени, имя_отца СОБРАТЬ NOCASE") LiveData getAll(); } StudentsRepo.java

пакет Ask2784.studentsdetails; импортировать android.app.Application; импортировать androidx.lifecycle.LiveData; импортировать java.util.List; импортировать java.util.concurrent.Executor; импортировать java.util.concurrent.Executors; публичный класс StudentRepo { частный StudentDao StudentDao; частный LiveData allStudents; частная служба исполнителя = Executors.newSingleThreadExecutor(); public StudentRepo (приложение) { StudentDatabase db = StudentDatabase.getInstance(application.getApplicationContext()); студентДао = db.studentDao(); allStudents = StudentDao.getAll(); } public void Insert (Студент) { сервис.выполнить( () -> { студентДао.вставка(студент); }); } public void update (Студент) { сервис.выполнить( () -> { StudentDao.update(студент); }); } public void delete (Студент) { сервис.выполнить( () -> { студентДао.delete(студент); }); } общественный недействительный deleteAllStudents () { сервис.выполнить( () -> { студентДао.deleteAll(); }); } public LiveData getAllStudents() { вернуть всех студентов; } } StudentViewModel.java
импортировать android.app.Application; импортировать androidx.lifecycle.AndroidViewModel; импортировать androidx.lifecycle.LiveData; импортировать java.util.List; публичный класс StudentViewModel расширяет AndroidViewModel { частный репозиторий StudentRepo; частный LiveData allStudents; public StudentViewModel (приложение) { супер(приложение); репо = новый StudentRepo (приложение); allStudents = repo.getAllStudents(); } public void Insert (Студент) { репо.вставка(студент); } public void update (Студент) { repo.update(студент); } public void delete (Студент) { repo.delete(студент); } общественный недействительный deleteAllStudents () { repo.deleteAllStudents(); } public LiveData getAllStudents() { вернуть всех студентов; } }
Я хочу получить вставленный идентификатор при добавлении нового студента в базу данных комнат. но я не хочу использовать LiveData

@Insert длинная вставка(Студент-студент); и использовать в StudentsRepo.java нравится

публичная длинная вставка (Студент){ вернуть студентДао.вставить(студент); // возвращаем вставленный идентификатор } также нужен метод getStudentById; но я не знаю, как вернуть значение из Executors.execute(()->{});
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»