# SQLite

SQLite è una libreria software scritta in linguaggio C che implementa un DBMS SQL di tipo ACID incorporabile all'interno di applicazioni. Il suo creatore, D. Richard Hipp, lo ha pubblicato nel pubblico dominio, rendendolo utilizzabile quindi senza alcuna restrizione. Permette di creare una base di dati (comprese tabelle, query, form, report) incorporata in un unico file, come nel caso dei moduli Access di Microsoft Office e Base di OpenOffice.org e Libre Office; analogamente a prodotti specifici come Paradox o Filemaker.
SQLite non è un processo standalone utilizzabile di per sé, ma può essere incorporato all'interno di un altro programma. È utilizzabile con il linguaggio C/C++, ed esistono binding anche per altri linguaggi, in particolare Tcl. È inoltre stato integrato nella versione 5 di PHP, consentendo a tale popolare linguaggio di disporre di un altro RDBMS indipendentemente dalla presenza di MySQL. Viene utilizzato in Mozilla Firefox e Seamonkey per memorizzare i segnalibri, la cronologia di navigazione ed altre informazioni.

## Caratteristiche e limitazioni

La libreria offre molte interessanti caratteristiche:
* è compatta (meno di 750KB per l'intera libreria alla versione 3.39.0);
* è molto veloce; in molti casi più di MySQL e PostgreSQL;
* il codice sorgente è liberamente disponibile, chiaro e ben commentato;
* è in grado di interpretare stringhe SQL; a differenza di altre librerie simili, supporta buona parte dello standard SQL92;
* ha la possibilità di interpretare campi in JSON;
* l'API è semplice da utilizzare;
* ha transazioni atomiche, consistenti, isolate e durabili (ACID), anche in caso di crash di sistema o blackout;
* è multipiattaforma;
* include un programma di utilità a riga di comando per accedere al database anche manualmente (come su MySQL, Postgresql e tanti altri DB) o tramite scripting;
* supporta database nell'ordine dei terabyte, con righe grandi fino a 1GB;
* un database consiste di un unico file, il cui formato interno è indipendente dalla piattaforma e dal relativo ordine dei byte;
* non ha dipendenze esterne;
* normalmente non richiede alcun lavoro di amministrazione, ma supporta il comando "SQL VACUUM" nel caso si renda necessario compattare esplicitamente i dati del database.
SQLite presenta dei limiti legati in parte alla finalità di semplice database da incorporare in altre applicazioni:
* non offre le stored procedure.
* non prevede la gestione dei permessi d'accesso, demandata al software con cui si interagisce con il database e/o al meccanismo dei permessi del file system;
* non ha una vera gestione della concorrenza: le applicazioni che lo utilizzano, se necessario, devono implementarla;
* per garantire la coerenza del file del database sono usati i lock del file system, e quindi vi possono essere problemi qualora quest'ultimo non li implementi correttamente, ad esempio con file system di rete (come NFS);
* non offre alcuna cache per le query (e non ne ha la possibilità, non esistendo un processo server centrale);
* non ha protocolli di rete, non essendo utilizzabile come programma a sé; è possibile utilizzare un database remoto, ma solo tramite file system di rete del sistema operativo, con prestazioni difficilmente accettabili;
* non ha un supporto completo per il costrutto SQL "ALTER TABLE".
* non supporta la scrittura diretta nelle viste (occorre usare trigger "INSTEAD OF");
* non supporta trigger di tipo "FOR EACH STATEMENT" ma solo "FOR EACH ROW", eventualmente combinato con "INSTEAD OF";
* il supporto ai trigger ricorsivi ed ai vincoli sulle chiavi esterne, introdotto rispettivamente nelle versioni 3.6.18 e 3.6.19, deve essere attivato dal programmatore oppure definito in fase di compilazione della libreria.
Una peculiarità di SQLite è la gestione flessibile dei tipi di dati: ogni campo può contenere qualsiasi tipo di dato (gestito differentemente nella versione 2 e 3).

## Interfacce grafiche per SQLite

Pur gestibile da altre applicazioni, esistono delle interfacce grafiche appositamente sviluppate per SQLite:
* DaDaBIK (sito)- software proprietario scritto in PHP che permette di creare un Web front-end per SQLite senza scrivere codice. Anche per MySQL e PostgreSQL;
* SpatiaLite (sito) Archiviato il 22 luglio 2011 in Internet Archive.- estensione per il supporto dei dati geografici all'interno di database SQLite, può essere utilizzato da console o tramite un'interfaccia grafica dedicata.
* Database Browser for SQLite (sito)— è un'applicazione multipiattaforma che consente di amministrare in modo semplificato, con una interfaccia grafica, database di SQLite; Licenza public domain
* TkSQLite (sito)— applicazione multipiattaforma. Licenza BSD-style
* sqlite-manager (sito)— è una estensione per browser basati su Gecko (Firefox 3, Thunderbird 3, Seamonkey 2, Sunbird 1.0, Komodo 5.0, etc.) multipiattaforma, che consente di amministrare in modo semplificato, con l'interfaccia grafica del browser, database di SQLite;
* SQLiteManager (sito)— è un'applicazione multipiattaforma, basata sul web, che consente di amministrare in modo semplificato, con una interfaccia grafica, database di SQLite; Lingua francese
* Sqliteman (sito)— applicazione realizzata con le librerie Qt4 - versione per GNU/Linux, Mac, Windows, richiede SQLite versione 3.
* Database Master (sito) per Windows, anche per MySQL, PostgreSQL, FireBird, Oracle, DB2, Informix, ODBC, OleDB, SQL-Server, MongoDB.
* Sqlite-Workbench (sito) - applicazione online per la gestione grafica di database sql
* DataBase.Net (sito) Applicazione sviluppata .Net / Gratuita (La versione commerciale non ha limiti in tante funzioni)

## Diffusione

Chromium (e quindi anche Google Chrome), Mozilla Firefox e Mozilla Thunderbird memorizzano varie informazioni di configurazione (segnalibri, cookie, contatti della rubrica, ecc) in database SQLite. Skype è un altro software molto diffuso che utilizza SQLite. Adobe utilizza SQLite come formato file in Adobe Photoshop Lightroom, come database di appoggio alle applicazioni in Adobe AIR e internamente in Adobe Reader.
Grazie alle ridotte dimensioni SQLite è particolarmente adatto ai sistemi embedded. SQLite viene inoltre utilizzato su iOS e MacOS per la gestione degli SMS e MMS, per il calendario, la cronologia delle chiamate e la memorizzazione dei contatti. La libreria è inoltre utilizzata in Symbian OS ed Android, sul sistema operativo del BlackBerry e su webOS di Palm. SQLite è inoltre integrato nei linguaggi PHP e Python.