История изменений
Исправление victor79, (текущая версия) :
Очень важная штука, для работы с реляционными СУБД. Язык такой запросов. Без него в куче серьёзных проектов делать нечего.
Если уж задавать вопрос про СУБД, то он будет такой: в проекте, это демонстрационный пример Sunflower, есть файл plants.json, который содержит таблицу. И с этой таблицей после работается запросом из аннотации:
@Query("SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name")
Так же там есть подобные запросы к таблицам, которые не идут из json:
@Query("SELECT * FROM garden_plantings")
вероятно первая таблица инициализируется строками:
@Entity(tableName = "plants")
data class Plant(
@PrimaryKey @ColumnInfo(name = "id") val plantId: String,
val name: String,
val description: String,
val growZoneNumber: Int,
val wateringInterval: Int = 7, // how often the plant should be watered, in days
val imageUrl: String = ""
) {
/**
* Determines if the plant should be watered. Returns true if [since]'s date > date of last
* watering + watering Interval; false otherwise.
*/
fun shouldBeWatered(since: Calendar, lastWateringDate: Calendar) =
since > lastWateringDate.apply { add(DAY_OF_YEAR, wateringInterval) }
override fun toString() = name
}
Вторая:
@Entity(
tableName = "garden_plantings",
foreignKeys = [
ForeignKey(entity = Plant::class, parentColumns = ["id"], childColumns = ["plant_id"])
],
indices = [Index("plant_id")]
)
data class GardenPlanting(
@ColumnInfo(name = "plant_id") val plantId: String,
/**
* Indicates when the [Plant] was planted. Used for showing notification when it's time
* to harvest the plant.
*/
@ColumnInfo(name = "plant_date") val plantDate: Calendar = Calendar.getInstance(),
/**
* Indicates when the [Plant] was last watered. Used for showing notification when it's
* time to water the plant.
*/
@ColumnInfo(name = "last_watering_date")
val lastWateringDate: Calendar = Calendar.getInstance()
) {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
var gardenPlantingId: Long = 0
}
Обе таблицы создаются CREATE TABLE в герерационной части проета.
Так вот вопрос, каким образом дается указание компоновщику, что файл plants.json должен преобразоваться в таблицу? Где указание того, что одна таблица это plants.json, а другая просто пустая таблица? И какими строками говорится компоновщику, что для таблиц нужно сделать CREATE TABLE?
Можно конечно проверить, в пустом проекте подключить import androidx.room.Entity и после написать @Entity(...), но я сомневаюсь что из этого получится CREATE TABLE.
Я изрядно посидел в Qt, так там есть файл pro, в котором перечисляются все файлы проекта и способ их подключения. А здесь не понятно, как компоновщик отличает файлы проекта от прочих.
Исправление victor79, :
Очень важная штука, для работы с реляционными СУБД. Язык такой запросов. Без него в куче серьёзных проектов делать нечего.
Если уж задавать вопрос про СУБД, то он будет такой: в проекте, это демонстрационный пример Sunflower, есть файл plants.json, который содержит таблицу. И с этой таблицей после работается запросом из аннотации:
@Query("SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name")
Так же там есть подобные запросы к таблицам, которые не идут из json:
@Query("SELECT * FROM garden_plantings")
вероятно первая таблица инициализируется строками:
@Entity(tableName = "plants")
data class Plant(
@PrimaryKey @ColumnInfo(name = "id") val plantId: String,
val name: String,
val description: String,
val growZoneNumber: Int,
val wateringInterval: Int = 7, // how often the plant should be watered, in days
val imageUrl: String = ""
) {
/**
* Determines if the plant should be watered. Returns true if [since]'s date > date of last
* watering + watering Interval; false otherwise.
*/
fun shouldBeWatered(since: Calendar, lastWateringDate: Calendar) =
since > lastWateringDate.apply { add(DAY_OF_YEAR, wateringInterval) }
override fun toString() = name
}
Вторая:
@Entity(
tableName = "garden_plantings",
foreignKeys = [
ForeignKey(entity = Plant::class, parentColumns = ["id"], childColumns = ["plant_id"])
],
indices = [Index("plant_id")]
)
data class GardenPlanting(
@ColumnInfo(name = "plant_id") val plantId: String,
/**
* Indicates when the [Plant] was planted. Used for showing notification when it's time
* to harvest the plant.
*/
@ColumnInfo(name = "plant_date") val plantDate: Calendar = Calendar.getInstance(),
/**
* Indicates when the [Plant] was last watered. Used for showing notification when it's
* time to water the plant.
*/
@ColumnInfo(name = "last_watering_date")
val lastWateringDate: Calendar = Calendar.getInstance()
) {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
var gardenPlantingId: Long = 0
}
Обе таблицы создаются CREATE TABLE в герерационной части проета.
Так вот вопрос, каким образом дается указание компоновщику, что файл plants.json должен преобразоваться в таблицу? Где указание того, что одна таблица это plants.json, а другая просто пустая таблица? И какими строками говорится компоновщику, что для таблиц нужно сделать CREATE TABLE?
Можно конечно проверить, в пустом проекте подключить import androidx.room.Entity и после написать @Entity(...), но я сомневаюсь что из этого получится CREATE TABLE.
Я изрядно посидел в Qt, так там есть файл pro, в котором перечисляются все файлы проекта и способ их подключения.
Исходная версия victor79, :
Очень важная штука, для работы с реляционными СУБД. Язык такой запросов. Без него в куче серьёзных проектов делать нечего.
Если уж задавать вопрос про СУБД, то он будет такой: в проекте, это демонстрационный пример Sunflower, есть файл plants.json, который содержит таблицу. И с этой таблицей после работается запросом из аннотации:
@Query("SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name")
Так же там есть подобные запросы к таблицам, которые не идут из json:
@Query("SELECT * FROM garden_plantings")
вероятно первая таблица инициализируется строками:
@Entity(tableName = "plants")
data class Plant(
@PrimaryKey @ColumnInfo(name = "id") val plantId: String,
val name: String,
val description: String,
val growZoneNumber: Int,
val wateringInterval: Int = 7, // how often the plant should be watered, in days
val imageUrl: String = ""
) {
/**
* Determines if the plant should be watered. Returns true if [since]'s date > date of last
* watering + watering Interval; false otherwise.
*/
fun shouldBeWatered(since: Calendar, lastWateringDate: Calendar) =
since > lastWateringDate.apply { add(DAY_OF_YEAR, wateringInterval) }
override fun toString() = name
}
Вторая:
@Entity(
tableName = "garden_plantings",
foreignKeys = [
ForeignKey(entity = Plant::class, parentColumns = ["id"], childColumns = ["plant_id"])
],
indices = [Index("plant_id")]
)
data class GardenPlanting(
@ColumnInfo(name = "plant_id") val plantId: String,
/**
* Indicates when the [Plant] was planted. Used for showing notification when it's time
* to harvest the plant.
*/
@ColumnInfo(name = "plant_date") val plantDate: Calendar = Calendar.getInstance(),
/**
* Indicates when the [Plant] was last watered. Used for showing notification when it's
* time to water the plant.
*/
@ColumnInfo(name = "last_watering_date")
val lastWateringDate: Calendar = Calendar.getInstance()
) {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
var gardenPlantingId: Long = 0
}
Обе таблицы создаются CREATE TABLE в герерационной части проета.
Так вот вопрос, каким образом дается указание компоновщику, что файл plants.json должен преобразоваться в таблицу? Где указание того, что одна таблица это plants.json, а другая просто пустая таблица? И какими строками говорится компоновщику, что для таблиц нужно сделать CREATE TABLE?
Можно конечно проверить, в пустом проекте подключить import androidx.room.Entity и после написать @Entity(...), но я сомневаюсь что из этого получится CREATE TABLE.