У меня есть 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();
}