Per integrare la libreria nel progetto Android si deve modificare il file build.gradle (app) aggiungendo il plugin kapt in testa
apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'apply plugin: 'kotlin-kapt'
ed aggiungendo le seguenti dipendenze (questo sono le dipendenze per Kotlin, nel caso di uso di Java la terza riga, quella che inizia con kapt, deve essere sostituita con
annotationProcessor "androidx.room:room-compiler:$room_version"
La gestione delle chiamate Rooms avviene per SQL
In sintesi viene definito il tracciato record del database. Da notare che non sono esplicitamente previsti campi DateTime; per questo motivo uso lo Unix Time come Long
Il nome dell'unica tabella e' nome_tabella
Le query sono incluse nella sezione DAO. Ogni query riporta un int che dice quante righe sono state interessate dalla query stessa
Nella sezione Database viene collegata la tabella al Db
Attenzione: se si cambia il tracciato record deve essere modificato il numero di versione del Db
Il nome del file e' inserito in DatabaseBuilder
Le query vengono gestite all'interno di coroutine
Per copiare il database dal telefono al PC si puo' usare
adb -d shell "run-as com.luca.innocenti.roomdb cat /data/data/com.luca.innocenti.roomdb/databases/sensori.db" > /home/luca/room.db
dove com.luca.innocenti.roomdb e' il nome del package mentre sensori.db e' il nome del file
database sul telefono
Altrimenti da Android Studio si va su View/Tool Windows/Device File Explorer
Per leggere il file su desktop si puo' utilizzare DB Browser for SQLite
==============================
def room_version = "2.2.5" implementation "androidx.room:room-runtime:$room_version"kapt "android.arch.persistence.room:compiler:$room_version" // optional - Kotlin Extensions and Coroutines support for Roomimplementation "androidx.room:room-ktx:$room_version" // Test helperstestImplementation "androidx.room:room-testing:$room_version" annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
La gestione delle chiamate Rooms avviene per SQL
In sintesi viene definito il tracciato record del database. Da notare che non sono esplicitamente previsti campi DateTime; per questo motivo uso lo Unix Time come Long
Il nome dell'unica tabella e' nome_tabella
Le query sono incluse nella sezione DAO. Ogni query riporta un int che dice quante righe sono state interessate dalla query stessa
Nella sezione Database viene collegata la tabella al Db
Attenzione: se si cambia il tracciato record deve essere modificato il numero di versione del Db
Il nome del file e' inserito in DatabaseBuilder
Le query vengono gestite all'interno di coroutine
Per copiare il database dal telefono al PC si puo' usare
adb -d shell "run-as com.luca.innocenti.roomdb cat /data/data/com.luca.innocenti.roomdb/databases/sensori.db" > /home/luca/room.db
database sul telefono
Altrimenti da Android Studio si va su View/Tool Windows/Device File Explorer
Per leggere il file su desktop si puo' utilizzare DB Browser for SQLite
package com.luca.innocenti.roomdb import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.room.* import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { @Entity(tableName = "nome_tabella") data class TabellaEntity( @PrimaryKey(autoGenerate = true) var id: Int, @ColumnInfo(name = "tempo") var tempo: Long = 0, @ColumnInfo(name = "pitch") var pitch: Float = 0.0f, @ColumnInfo(name = "roll") var roll: Float = 0.0f, @ColumnInfo(name = "azimuth") var azimuth: Float = 0.0f, @ColumnInfo(name = "nota") var nota: String ) @Dao interface DbDao { @Query("SELECT * FROM nome_tabella") fun getAll(): List<TabellaEntity> @Query("SELECT * FROM nome_tabella WHERE nota LIKE :nota") fun findByNota(nota: String): List<TabellaEntity> @Insert fun insertAll(vararg todo: TabellaEntity) @Delete fun delete(todo: TabellaEntity) @Query("DELETE FROM nome_tabella WHERE id = :id") fun getSingleRecordDelete(id: Int): Int @Query("UPDATE nome_tabella SET nota=:nota WHERE id = :indice") fun getSingleRecordUpdate(nota: String, indice: Int): Int @Update fun updateDb(vararg todos: TabellaEntity) } @Database(entities = [TabellaEntity::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun DbDao(): DbDao } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "sensori.db" ).build() GlobalScope.launch { db.DbDao().insertAll(TabellaEntity(0,12,13.4f,7.7f,0.3f,"Nota")) db.DbDao().insertAll(TabellaEntity(0,13,13.4f,7.7f,0.3f,"Nota2")) var data = db.DbDao().getAll() data?.forEach { Log.d("test", it.toString()) } var ricerca = db.DbDao().findByNota("Nota") ricerca?.forEach{ Log.d("ricerca", ricerca.toString()) } db.DbDao().getSingleRecordDelete(6) data = db.DbDao().getAll() data?.forEach { Log.d("dopo", it.toString()) } db.DbDao().getSingleRecordUpdate("modifica",6) data = db.DbDao().getAll() data?.forEach { Log.d("dopo", it.toString()) } //db.clearAllTables() db.close() } } }