Zgodnie z dokumentami :
Możesz ustawić argument procesora adnotacji (room.schemaLocation), aby poinformować Room o wyeksportowaniu schematu do folderu. Chociaż nie jest to obowiązkowe, dobrą praktyką jest posiadanie historii wersji w bazie kodu i powinieneś zatwierdzić ten plik w systemie kontroli wersji (ale nie dostarczaj go wraz z aplikacją!).
Więc jeśli nie musisz sprawdzać schematu i chcesz pozbyć się ostrzeżenia, po prostu dodaj exportSchema = false
do niego RoomDatabase
w następujący sposób.
@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
//...
}
Jeśli zastosujesz się do odpowiedzi @mikejonesguy poniżej, będziesz postępować zgodnie z dobrą praktyką wymienioną w dokumentacji :). Zasadniczo otrzymasz .json
plik w swoim ../app/schemas/
folderze. I wygląda to tak:
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "53db508c5248423325bd5393a1c88c03",
"entities": [
{
"tableName": "sms_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER"
},
{
"fieldPath": "message",
"columnName": "message",
"affinity": "TEXT"
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "INTEGER"
},
{
"fieldPath": "clientId",
"columnName": "client_id",
"affinity": "INTEGER"
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [],
"foreignKeys": []
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")"
]
}
}
Jeśli moje zrozumienie jest poprawne, otrzymasz taki plik przy każdej aktualizacji wersji bazy danych, abyś mógł łatwo śledzić historię swojego db.
W
build.gradle
pliku modułu aplikacji dodaj to dodefaultConfig
sekcji (podandroid
sekcją). Spowoduje to zapisanie schematu doschemas
podfolderu folderu projektu.Lubię to:
źródło
app/schemas
katalogu przez tę operację? I słyszałem, że powinniśmy umieścić schemat w katalogu, który nie jest zawarty w kataloguapk
. Jak możemy to zrobić?Kotlin? No to ruszamy:
Nie zapomnij o wtyczce:
apply plugin: 'kotlin-kapt'
Aby uzyskać więcej informacji na temat procesora adnotacji Kotlin, odwiedź: Dokumenty Kotlin
źródło
Powyższe odpowiedzi są poprawne. Ta wersja jest łatwa do naśladowania:
Ponieważ „Katalog eksportu schematu nie jest dostarczany do procesora adnotacji”, musimy udostępnić katalog do eksportu schematu:
Lub
(ponieważ wartość domyślna jest zawsze prawdziwa)
$ projectDir : to nazwa zmiennej, której nie można zmienić. otrzyma własny katalog projektów
schematy : to ciąg znaków, który możesz zmienić na dowolny. Na przykład:
"$projectDir/MyOwnSchemas".toString()
źródło
build.gradle(project:????)
i niebuild.gradle(app:????)
?Odpowiedź @mikejonesguy jest idealna, na wypadek, gdybyś planował przetestować migracje pokoju (zalecane), dodaj lokalizację schematu do zestawów źródłowych.
build.gradle
źródło
Używam
.kts
plików Gradle (Kotlin Gradle DSL) ikotlin-kapt
wtyczki, ale nadal pojawia się błąd kompilacji skryptu, gdy używam odpowiedzi Iwanowa Maksima.Dla mnie była to jedyna rzecz, która działała:
źródło
Prawdopodobnie nie dodać klasę pokoju, aby dziecko
RoomDatabase
klasie dzieci w@Database(entities = {your_classes})
źródło