Android Мигрирует с SQLite в комнату

#android #sqlite #android-room

Вопрос:

У меня есть приложение, которое использует базу данных Sqlite, и в моей базе данных есть три таблицы. Теперь я хочу переключиться на библиотеку комнат , я могу успешно создавать таблицы в комнате, но я не могу понять, как определить отношения между объектами. Я посетил сайт разработчиков Android, но я не знаю, как это относится ко мне . Вот запросы, которые я использую для создания базы данных в sqlite

 CREATE TABLE categories (
id            INTEGER PRIMARY KEY AUTOINCREMENT,
category_name         NOT NULL
                      UNIQUE,
category_id           NOT NULL
                      UNIQUE
);


CREATE TABLE quotes_table (
    id          INTEGER PRIMARY KEY AUTOINCREMENT,
    quote               UNIQUE,
    category_id         NOT NULL
);


CREATE TABLE favourites (
    id            INTEGER  PRIMARY KEY AUTOINCREMENT,
    quote,
    category_name,
    date          DATETIME DEFAULT (CURRENT_TIMESTAMP) 
);
 

Вот как я запрашиваю данные из своей базы данных

     public Cursor getAllCategories() {

    String query = "SELECT * FROM categories ;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = null;
    try {
        openDatabase();
        cursor = db.rawQuery(query, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return cursor;
}

public Cursor getQuotes(String catId) {

    String query = "SELECT * FROM quotes_table INNER JOIN categories  ON quotes_table.category_id = categories.category_id
     WHEREquotes_table.category_id like "   catId;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = null;
    try {
        openDatabase();
        cursor = db.rawQuery(query, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return cursor;
}
 

Может кто-нибудь, пожалуйста, помочь . Я много искал, но не смог найти ничего, что могло бы помочь.

Ответ №1:

Я надеюсь, что вы создали классы сущностей для своих таблиц.

Вы можете создать дополнительный класс для представления взаимосвязи между этими двумя таблицами.

 public class QuotesWithCategories{
    @Embedded public Quote quote ;
    @Relation(
         parentColumn = "category_id",
         entityColumn = "category_id"
    )
    public Category category;
}
 

Теперь, чтобы получить запись, вы можете определить нижеприведенную функцию в своем DAO.

 @Transaction
@Query("SELECT * FROM quotes_table WHERE quotes_table.category_id LIKE :catId")
public List<QuotesWithCategories> getQuotesWithCategories(int catId");