Loading ...

Connessione a SQLite con Java

Connessione a SQLite con Java

SQLite è uno dei database embedded più utilizzati, ed oggi vediamo come usarlo in un'applicazione Java.

Cominciamo con le dipendenze di Maven:

        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.21.0.1</version>
        </dependency>

Bene, adesso la nostra classe POJO, che in pratica rappresenta i record nella tabella:

import java.io.Serializable;

public class Nota implements Serializable {

    private int id;
    private String gruppo;
    private String titolo;
    private String testo;
    private String aggiunta;
    private String modifica;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getGruppo() {
        return gruppo;
    }

    public void setGruppo(String gruppo) {
        this.gruppo = gruppo;
    }

    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 String getAggiunta() {
        return aggiunta;
    }

    public void setAggiunta(String aggiunta) {
        this.aggiunta = aggiunta;
    }

    public String getModifica() {
        return modifica;
    }

    public void setModifica(String modifica) {
        this.modifica = modifica;
    }
}

Questa invece la classe che gestisce la connessione al db, tramite Singleton, con i vari metodi di interrogazione (giusto per darvi un pò di esempi su cui lavorare):

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DBManager {

    private static Connection conn;

    private DBManager() {
    }

    public static DBManager getInstance() {
        return DBManagerHolder.INSTANCE;
    }

    private static class DBManagerHolder {

        private static final DBManager INSTANCE = new DBManager();
    }

    public Connection getConnection() throws SQLException {
        return conn = DriverManager.getConnection("jdbc:sqlite:notes.db");
    }

    public List<Nota> getAll() throws SQLException {
        conn = DBManager.getInstance().getConnection();
        List<Nota> list = new ArrayList<>();
        try (PreparedStatement cstmt = conn.prepareStatement("SELECT * FROM notes")) {
            try (ResultSet rs = cstmt.executeQuery()) {
                while (rs.next()) {
                    Nota n = new Nota();
                    n.setId(rs.getInt("id"));
                    n.setTitolo(rs.getString("titolo"));
                    n.setGruppo(rs.getString("gruppo"));
                    n.setTesto(rs.getString("testo"));
                    n.setAggiunta(rs.getString("aggiunta"));
                    n.setModifica(rs.getString("modifica"));
                    list.add(n);
                }
            }
        }
        return list;
    }

    public List<Nota> getGruppi() throws SQLException {
        conn = DBManager.getInstance().getConnection();
        List<Nota> list = new ArrayList<>();
        try (PreparedStatement cstmt = conn.prepareStatement
                ("SELECT * FROM notes GROUP BY gruppo ORDER BY gruppo")) {
            try (ResultSet rs = cstmt.executeQuery()) {
                while (rs.next()) {
                    Nota n = new Nota();
                    n.setGruppo(rs.getString("gruppo"));
                    list.add(n);
                }
            }
        }
        return list;
    }

    public List<Nota> getByGruppo(String gruppo) throws SQLException {
        conn = DBManager.getInstance().getConnection();
        List<Nota> list = new ArrayList<>();
        try (PreparedStatement pstmt = conn.prepareStatement
                ("SELECT * FROM notes WHERE gruppo = ? ORDER BY titolo")) {
            pstmt.setString(1, gruppo);
            try (ResultSet rs = pstmt.executeQuery()) {
                while (rs.next()) {
                    Nota n = new Nota();
                    n.setId(rs.getInt("id"));
                    n.setTitolo(rs.getString("titolo"));
                    n.setGruppo(rs.getString("gruppo"));
                    n.setTesto(rs.getString("testo"));
                    n.setAggiunta(rs.getString("aggiunta"));
                    n.setModifica(rs.getString("modifica"));
                    list.add(n);
                }
            }
        }
        return list;
    }

    public void addNota(Nota nota) throws SQLException {
        conn = DBManager.getInstance().getConnection();
        try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO notes VALUES(?,?,?,?,?,?)")) {
            pstmt.setInt(1, nota.getId());
            pstmt.setString(2, nota.getTitolo());
            pstmt.setString(3, nota.getGruppo());
            pstmt.setString(4, nota.getTesto());
            pstmt.setString(5, nota.getAggiunta());
            pstmt.setString(6, nota.getModifica());
            pstmt.executeUpdate();
        }
    }

    public void upNota(Nota nota) throws SQLException {
        conn = DBManager.getInstance().getConnection();
        try (PreparedStatement pstmt = conn.prepareStatement(
                "UPDATE notes SET titolo = ?, gruppo = ?, testo = ?, modifica = ? WHERE id = ?")) {
            pstmt.setString(1, nota.getTitolo());
            pstmt.setString(2, nota.getGruppo());
            pstmt.setString(3, nota.getTesto());
            pstmt.setString(4, nota.getModifica());
            pstmt.setInt(5, nota.getId());
            pstmt.executeUpdate();
        }
    }

    public void removeNota(Nota nota) throws SQLException {
        conn = DBManager.getInstance().getConnection();
        try (PreparedStatement pstmt = conn.prepareStatement("DELETE FROM notes WHERE id = ?")) {
            pstmt.setInt(1, nota.getId());
            pstmt.executeUpdate();
        }
    }

}

Come vedete, per chi conosce SQL, è tutto abbastanza semplice.

Per le operazioni usiamo JDBC, e le varie selezioni restituiscono liste della nostra classe POJO.

Enjoy!