База данных комнат: сопоставление строк между двумя таблицами, затем обновление соответствующей строки в другой таблице - PullRequest
0 голосов
/ 05 августа 2020

У меня есть 2 таблицы в базе данных Room: Таблица 1: tblFav - содержит «мои избранные» и Таблица 2: tblTrans - содержит «мои транзакции».

Я хотел бы знать, как лучше всего "сопоставить" каждое поле tblFav.favourite до tvlTrans.trans_tb_description с использованием что-то вроде INSTR. Я просто хочу определить, соответствует ли строка tblFav.favourite какой-либо части поля tvlTrans.trans_tb_description .

Если существует какое-либо «совпадение», я хочу ОБНОВИТЬ поле tvlTrans.match строкой tblFav.favourite .

Вопрос: Какой вариант / варианты лучше всего ?? т.е. могу я сделать это по запросу, списку просмотра. Могу ли я каким-то образом выполнить хранимую процедуру в Room для выбранного набора данных, так как я хочу одновременно преобразовать некоторые другие поля.

Другая информация: tblFav может иметь 100 строк и tblTrans может иметь тысячи строк данных. Я приложил дополнительную информацию.

Любая помощь будет принята с благодарностью.

Таблица tblFav:

@Entity(tableName = "tblFav",
        primaryKeys = {"username", "project", "favourite"},
        indices = {@Index(value = {"username", "project", "favourite"}, unique = true)})
public class Fav {
     @ColumnInfo(name = "FavId")
    public int FavId;

    @ColumnInfo(name = "username")
    @NonNull
    public String username;

    @ColumnInfo(name = "project")
    @NonNull
    public String project;

    @ColumnInfo(name = "favourite") //Matching this field to tblTrans.trans_description
    @NonNull
    public String favourite;

    @ColumnInfo(name = "code")
    public int code;

    @ColumnInfo(name = "description")
    public String description;

Таблица tblTrans:

    @Entity(tableName = "tblTrans")

public class Trans {
    @ColumnInfo(name = "trans_id")
    @PrimaryKey(autoGenerate = true)
    private int trans_id;

    @ColumnInfo(name = "trans_date")
    private String trans_date;

    @ColumnInfo(name = "trans_ref")
    private int trans_ref;

    @ColumnInfo(name = "trans_page")
    private int trans_page;

    @ColumnInfo(name = "trans_type")
    private String trans_type;

    @ColumnInfo(name = "trans_description")   // Does tblFav.favourite match anything in this field
    private String trans_description;

    @ColumnInfo(name = "trans_amount")
    private double trans_amount;

    //========== USERNAME / PROJECT ==========
    @ColumnInfo(name = "trans_username")
    private String trans_username;

    @ColumnInfo(name = "trans_project")
    private String trans_project;

    //========== ADDITIONAL FIELDS ==========
    @ColumnInfo(name = "trans_tb_code")
    private int trans_tb_code;

    @ColumnInfo(name = "trans_tb_description")
    private String trans_tb_description;

    @ColumnInfo(name = "trans_batchId")
    private String trans_batchId;

    @ColumnInfo(name = "trans_recn")
    private String trans_recn;

    @ColumnInfo(name = "trans_match")    //Results of match from tblFav.favourite
    private String trans_match;

    @ColumnInfo(name = "coa_description")
    public String coa_description;

FavDao. java

@Dao
public interface FavDao {
    @Insert
    void insert(Fav fav);

    @Insert(onConflict = OnConflictStrategy.IGNORE) 
    void addFavourite(Fav fav);

    @Update
    void update(Fav fav);

    @Delete
    void delete(Fav fav);

    @Query("DELETE FROM tblFav")
    void deleteAllFavourites();

    @Query("SELECT * from tblFav")
    LiveData<List<Fav>> getAllFavourites();}

TransDao. java

@Dao
public interface TransDao{
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    void insertTrans(Trans mTrans);

    @Update
    void updateTrans(Trans mTrans);

    @Delete
    void deleteTrans(Trans mTrans);

    @Query("DELETE FROM tblTrans")
    void deleteAllTrans();

    @Query("SELECT tblTrans.*, tblCoa.description AS coa_description from tblTrans INNER JOIN tblCoa ON tblTrans.trans_tb_code = tblCoa.code ORDER BY tblTrans.trans_ref ASC ")
    LiveData<List<Trans>> getAllTrans();
}
...