#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");