SQLITE in Java

Pochi giorni fa, una mia amica mi ha chiesto se potevo realizzare un programma di gestione del personale per una piccola azienda dove lavora. Ho accettato e mi sono messo subito al lavoro ed ecco che mi si presenta il primo grande e immenso problema: questa piccola azienda non ha una macchina Server. Ora, come tutti o spero la maggior parte di voi sa, le applicazioni che usano i database sono applicazioni Client-Server. Quindi, cosa fare? Girovagando per internet e soprattutto grazie al consiglio del nostro admin (Rif) ho optato per SQLITE. Questo programma è molto interessante in quanto crea un “file.db” dove memorizza tutte le informazioni che gli servono; chiaramente ha funzionalità ristrette rispetto ad un’applicazione SQL “normale” tuttavia risulta ottimo per questo genere di utilizzi. Scrivo questa piccola guida in modo tale che se anche voi avete lo stesso problema potete fare come ho fatto io. Entriamo ora nel dettaglio della programmazione.

Iniziamo con lo scaricare la libreria SQLiteJDBC. Successivamente apriamo il nostro ambiente di lavoro (consiglio NetBeans) e una volta creato il progetto, carichiamo la libreria e importiamola in questo modo:

import java.sql.*;

Il prossimo passo è quello di creare un oggetto Connection che è fondamentale per applicazioni SQL. Il mio consiglio è quello di dichiararlo public e static in modo tale che tutti i metodi che andrete a creare potranno usufruire delle sue potenzialità. Scriveremo quindi:

public static Connection conn;

Ora dobbiamo caricare il driver JDBC strumento utilissimo in quanto traduce le operazioni java in sql e si connette con il database. Dichiariamo, quindi, una funzione caricadriver di tipo void in questo modo:

1
2
3
4
5
6
public void caricadriver() {
   try {  Class.forName("org.sqlite.JDBC"); }
   catch(ClassNotFoundException e) {
      System.out.println("Driver SQL non trovato");
      System.exit(1); }
 }

E’ la seconda riga che si occupa del caricamento del driver. Se ci fossero dei problemi, tramite il blocco catch stampo a video “Driver SQL non trovato” e termino il programma grazie alla funzione della riga cinque.

Ho appena detto che il driver JDBC mi permette di comunicare con il database, ma quale database? Bella domanda!! Risolviamo questo problema andando a definire un’altra funzione di tipo void che chiameremo collegati. Questa funzione crea appunto un database ( file.db ) se non esiste, altrimenti, se gia esiste, ci si collega. Per questo motivo SQLITE è bello ed utile, in quanto il database non è altro che il file.db nel quale inserirà tutte le informazioni che gli servono. Andiamo nel dettaglio guardando il codice:

1
2
3
4
5
6
public void collegati(){
   try { conn = DriverManager.getConnection("jdbc:sqlite:gestione.db"); }
   catch(SQLException e) {
      System.out.println("Collegamento non riuscito");
      System.exit(1); }
}

La seconda riga è incaricata di creare o di connettersi al database gestione.db,  chiamato nel caso specifico “gestione”, rinominabile a vostro piacimento. Anche qui se qualcosa va storto verrà eseguita la funzione della riga cinque che stampa il messaggio “Collegamento non riuscito” e la funzione della riga sei che termina il programma.

Et voila!! A questo punto la connessione al database è fatta! Semplice vero?  Da qui in poi potete utilizzare tutti i comandi SQL per java che conoscete. Io non posso ovviamente dilungarmi oltre.  Vi lascio un piccolo file java a scopo esemplificativo che crea un file “gestione.db”, una tabella “clienti” e ci inserisce dei valori.

Prima di terminare l’articolo volevo mostrarvi un’ultima cosa che a me è servita molto. Come faccio a creare una tabella solo una volta? Mi spiego meglio, per l’applicazione della mia amica ho dovuto creare una tabella “clienti” e ovviamente non voglio che ogni volta che apre il programma ci sia una funzione che tenta di costruire tale tabella, in quanto potrei incorrere in spiacevoli errori. Per risolvere questo problema, scaricate dal sito SQLITE la command line. Una volta scaricata copiatela nella directory dove volete creare o avere il file.db. A questo punto se siete utenti Windows aprite il prompt dei comandi, altrimenti se siete utenti Linux aprite il terminale. Spostatevi quindi nella directory in questione e digitate

sqlite3  nome_databse.db

Tale comando esegue lo stesso compito della funzione collegati precedentemente definita e cioè crea o si collega, ove esiste, al file.db. Da qui in poi potete creare tabelle, fare operazioni di select, insomma, tutto quello che volete.

Buon lavoro a tutti!!!

 

P.s. Non vi ricordate i comandi SQL? guardate qui !!

About the Author

Infamone professionista, è l'avversario più scorretto contro il quale potreste giocare a qualunque cosa, incluso il solitario. E' l'inseparabile nemesi di RemovedQuasar, infatti lo cerca continuamente per compiere qualche altra nefandezza. Prestate bene attenzione a quello che vi dice: se non capite la prima volta, chiedergli di ripetere potrebbe essere fatale... Altro...

8 commenti su “SQLITE in Java”

  1. Grande! Sta roba mi potrebbe veramente servire a breve 😀

    Appena posso mi spulcio tutto!

  2. ciao!!!

    ottima guida!!!!

    ma ora mi sorge un dubbio!!!

    se dovessi aggiornare un programma con SQLite come faccio ad aggiornare il programma senza toccare il database???

    cioè vorrei creare un programma aggiornato sempre incluso SQLite…vorrei mettettere in if..cioè ad esempio:
    “se il database esiste non installare SQLite in caso contrario installa il database”

    è POSSIBILE???

  3. Ciao Giuseppe! Scusa il ritardo ma questi giorni sono stato impegnato! Se ho capito bene la tua domanda non devi aggiungere nessun “if” in quanto il problema viene risolto da SQLite “automagicamente”. Mi spiego meglio, quando ti colleghi al database il driver SQL controlla se esiste un file con estenzione “.db” chiamato, prendo l’esempio dell’articolo, “gestione”. Se c’è prende quello come default altrimenti ne crea uno nuovo. Quindi puoi modificare tranqullamente il programma cambiando il nome al database per crearne uno nuovo o lasciando lo stesso per aggiornare quello esistente.
    Spero di esserti stato utile!

  4. Ciao Frizzo !
    Grazie per condivedere il sorgente anche io lo condido sulla rete.
    Volevo chiederti ieri ho integrato il tutto con la classe che ho creato che legge un file legge un .ods di Libre Office usando la libreria odfdom-java-0.8.7.jar.
    Volevo integrare il tuo codice per inserire i dati sul DB (naturalmente verrai nominato sul mio Blog come il fornitore del codice) perchè non posso integrarlo direttamente su un Activity Android la quale usa una sua Java virtual machine.
    Secondo te ci possono essere conflitti tra odfdom-java-0.8.7.jar e sqlite-jdbc-3.7.2-javadoc.jar ??? Saluti ! w il mtallo w Pino Scotto !!!

  5. Ciao Angelo! Per quanto riguarda i conflitti tra le due librerie non saprei proprio che dirti dato che “odfdom-java-0.8.7.jar” non l’ho mai utilizzata. Invece per quanto riguarda Android ti posso suggerire di controllare questo sito http://developer.android.com/guide/topics/data/data-storage.html#db
    in quanto ci dovrebbe già essere un server sqlite nel sistema Andorid e quindi non necessiti dell’uso della libreria “sqlite-jdbc-3.7.2-javadoc.jar”.

  6. Ciao Frizzo, in realtà dovevo leggere i dati da un ODS e scriverli su un DB.
    In questo modo ho già il DB pronto da cui leggerà la mia APP.
    Ti ho nominato su http://www.blog-android.it la classe in questione verrà pubblicata oggi. Sei libero di prenderla, modificarla e ripubblicarla.
    Saluti,
    ANGELO !!! W IL METALLO !!!

  7. ciao a tutti!!!!
    dopo tante ricerche ho notato che da firefox si può scaricare un plug-in “sqlite manager” dove posso creare database tabelle etc…
    in java per connettermi al db sqlite scrivo:
    conn = DriverManager.getConnectio(“jdbc:sqlite:C:\db\test.sqlite”);
    quando creo il jar funziona benissimo…
    ma se volessi creare un jar incluso sqlite come faccio???
    spero di essere stato chiaro….

  8. Ciao Giuseppe! Ti ringrazio per la domanda in quanto era mia intenzione creare un unico “fat-jar” comprensivo di tutto, ma per mancanza di tempo non l’ho più fatto!. Se vuoi includere nel jar la libreria SqlLite prova con questa guida: http://www.newdigest.com/tecnologia/informatica/programmazione/java-includere-librerie-jar-dentro-a-un-altro-jar/
    Mentre se vuoi includere il database nel jar dovresti provare a inserirlo ad esempio nella cartella “src” del programma, quindi modificare la connessione in questa maniera:
    DriverManager.getConnection(“jdbc:sqlite:src/database.db”);
    Se vuoi fare un unico jar sia con la libreria che con il database basta che concateni le due operazioni. Fammi sapere se funziona dato che sono curioso pure io! P.s. Mi raccomando assicurati che il programma che manda in esecuzione il jar sia “Java SE binary”! 😉

Dicci la tua