如何使用目标实体更新 Android 上的 Rooms 数据库表中的特定列?
Posted
技术标签:
【中文标题】如何使用目标实体更新 Android 上的 Rooms 数据库表中的特定列?【英文标题】:How do I update specific columns in Rooms database table on Android using target entity? 【发布时间】:2021-05-16 10:24:06 【问题描述】:我只想更新我的 Rooms 数据库表中的特定列,并且正在使用 android Rooms 的目标实体类。但是,当我执行该函数时,表中的值不会更新。下面是这个update函数的activity类代码、dao接口、我的飞行类、repository和view model代码。
**Activity class**
flightViewModel.getAllFlights().observe(FlightDescriptionActivity.this, new Observer<List<Flight>>()
@Override
public void onChanged(List<Flight> flights)
CateringTime cateringTime = new CateringTime("End",currentTime,currentTime,"These are catering comments");
flightViewModel.updateCateringData(cateringTime);
);
**FlightDao interface**
@Update(entity = Flight.class)
public void updateCateringData(CateringTime... cateringTimes);
**Flight Class**
class CateringTime
//catering
private String catering_button_status;
private String catering_start_time;
private String catering_end_time;
private String catering_comments;
//primary keys
String flightNumber;
String date;
public CateringTime(String catering_button_status, String catering_start_time, String catering_end_time, String catering_comments)
this.catering_button_status = catering_button_status;
this.catering_start_time = catering_start_time;
this.catering_end_time = catering_end_time;
this.catering_comments = catering_comments;
**Flight repository class**
public void updateCateringData(CateringTime... cateringTimes)
new UpdateCateringDataAsyncTask(flightDao).execute(cateringTimes);
private static class UpdateCateringDataAsyncTask extends AsyncTask<CateringTime, Void, Void>
private FlightDao flightDao;
private UpdateCateringDataAsyncTask(FlightDao flightDao)
this.flightDao = flightDao;
@Override
protected Void doInBackground(CateringTime... cateringTimes)
flightDao.updateCateringData(cateringTimes);
return null;
**Flight View Model class**
public void updateCateringData(CateringTime... cateringTimes)
repository.updateCateringData(cateringTimes);
我哪里出错了?
【问题讨论】:
【参考方案1】:你能做这样的事情吗
@Query("UPDATE catering_time SET column = :column WHERE id = :id")
public void updateCateringColumn(String id, String column);
【讨论】:
这是可能的,但是有了目标实体,工作变得更容易和更快以上是关于如何使用目标实体更新 Android 上的 Rooms 数据库表中的特定列?的主要内容,如果未能解决你的问题,请参考以下文章
如何避免 Hibernate ValidationException 上的自动实体更新
Android“以推出为目标的安装”是指能够看到更新或能够安装更新的用户百分比吗?