【问题标题】:How do I update specific columns in Rooms database table on Android using target entity?如何使用目标实体更新 Android 上的 Rooms 数据库表中的特定列?
【发布时间】: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);
    }

我哪里出错了?

【问题讨论】:

    标签: android sql-update android-sqlite android-room android-database


    【解决方案1】:

    你能做这样的事情吗

    @Query("UPDATE catering_time SET column = :column WHERE id = :id")
    public void updateCateringColumn(String id, String column);
    

    【讨论】:

    • 这是可能的,但是有了目标实体,工作变得更容易和更快
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多