Nitrite: un database embedded NoSQL per Java

Mattepuffo's logo
Nitrite: un database embedded NoSQL per Java

Nitrite: un database embedded NoSQL per Java

Nitrite è un database embedded di tipo NoSQL scritto in Java; è quindi perfetto per le nostre applicazioni scritte in questo linguaggio che richiedono un db di questo tipo.

Non è molto difficile da usare, ed è anche possibile usarlo dentro applicazioni Android (ne vedremo un esempio in un altro articolo); infine, è usabile anche in Kotlin.

Detto ciò, vediamo come usarlo; se usate Maven:

        <dependency>
            <groupId>org.dizitart</groupId>
            <artifactId>nitrite</artifactId>
            <version>3.0.0</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.Date;

@Indices(value = {
        @Index(value = "data", type = IndexType.NonUnique),
        @Index(value = "titolo", type = IndexType.Unique)
})
public class Nota implements Serializable {

    @Id
    private long notaId;
    private String titolo;
    private String testo;
    private Date data;

    public long getNotaId() {
        return notaId;
    }

    public void setNotaId(long notaId) {
        this.notaId = notaId;
    }

    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        this.titolo = titolo;
    }

    public String getTesto() {
        return testo;
    }

    public void setTesto(String testo) {
        this.testo = testo;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }
}

Come potete vedere usimo le annotations per creare gli indici (univoci e non) e per indicare il campo ID.

Questa la classe che esegue la creazione del db (un file su filesystem), 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 org.dizitart.no2.objects.ObjectRepository;
import java.util.Date;

public class DBNotes {

    public void createDb() {
        try {
            Nitrite db = Nitrite.builder()
                    .compressed()
                    .filePath("notes.db")
                    .openOrCreate("matte", "9211");

            ObjectRepository<Nota> rep = db.getRepository(Nota.class);

            for (int i = 0; i < 10; i++) {
                Nota n = new Nota();
                n.setNotaId(i);
                n.setTitolo("TITOLO " + i);
                n.setTesto("Ciao, questo è il testo numero " + i);
                n.setData(new Date());
                rep.insert(n);
            }

            System.out.println(rep.size());
            Cursor<Nota> nota = rep.find();
            for (Nota n : nota) {
                System.out.println(n.getTesto());
            }

            Nota doppia = new Nota();
            doppia.setTitolo("TITOLO " + 0);
            rep.insert(doppia);

        } catch (UniqueConstraintException ex) {
            System.out.println(ex.getMessage());
        } catch (NullPointerException ex) {
            System.out.println("Nessun valore trovato!");
        } finally {
            System.exit(0);
        }
    }
}

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!