如何使用目标实体更新 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 数据库表中的特定列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不清除数据库的情况下重新加载 Roo 项目?

Spring Roo 生成list.html,生成所有字段

如何避免 Hibernate ValidationException 上的自动实体更新

Android“以推出为目标的安装”是指能够看到更新或能够安装更新的用户百分比吗?

如何参考CoreData中同一实体的单个属性更新实体的属性?

用于丰富报告应用程序的 Spring Roo