Usare Nitrite in Kotlin
Nitrite è un database embedded di tipo NoSQL scritto in Java; è quindi compatibile anche con Kotlin!
Non è molto difficile da usare, ed è anche possibile usarlo dentro applicazioni Android.
Detto ciò, se usate Maven aggiungete questa dipendenza:
<dependency>
<groupId>org.dizitart</groupId>
<artifactId>nitrite</artifactId>
<version>3.4.4</version>
</dependency>
Guardando alla documentazione, notiamo che possiamo usarlo in due modi:
- creando un document
- usando una classe POJO
Io lo sto usando nella seconda maniera, e quindi vediamo un esempio in questo senso.
Questa la mia classe POJO:
import org.dizitart.no2.IndexType
import org.dizitart.no2.objects.Id
import org.dizitart.no2.objects.Index
import org.dizitart.no2.objects.Indices
import java.io.Serializable
import java.util.*
@Indices(
value = [
Index(value = "data", type = IndexType.NonUnique),
Index(value = "titolo", type = IndexType.Unique)
]
)
class Nota : Serializable {
@Id
var notaId: Long = 0
var titolo: String? = null
var testo: String? = null
var data: Date? = null
}
Come potete vedere usimo le annotations per creare gli indici (univoci e non) e per indicare il campo ID.
Qui sotto la funzione che esegue la creazione del db, popola il db e lo va leggere:
import org.dizitart.no2.Nitrite;
import org.dizitart.no2.exceptions.UniqueConstraintException;
import org.dizitart.no2.objects.Cursor;
import java.util.Date;
fun main(args: Array<String>) {
createDb()
}
fun createDb() {
try {
val db = Nitrite.builder()
.compressed()
.filePath("notes.db")
.openOrCreate("matte", "9211")
val rep = db.getRepository(Nota::class.java)
for (i in 0..9) {
val n = Nota()
n.notaId = i.toLong()
n.titolo = "TITOLO $i"
n.testo = "Ciao, questo è il testo numero $i"
n.data = Date()
rep.insert(n)
}
println(rep.size())
val nota: Cursor<Nota> = rep.find()
for (n in nota) {
println(n.testo)
}
val doppia = Nota()
doppia.titolo = "TITOLO " + 0
rep.insert(doppia)
} catch (ex: UniqueConstraintException) {
println(ex.message)
} catch (ex: NullPointerException) {
println(ex.message)
}
}
Come vedete, provo a fare anche un inserimento manuale di un valore già esistente (chiave univoca); vedrete che il programma andrà in eccezione (che ho intercettato).
Enjoy!
kotlin nitrite maven nosql database
Commentami!