Usare Nitrite in Kotlin

Mattepuffo's logo
Usare Nitrite in Kotlin

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!


Condividi

Commentami!