[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 704.   SQLite: utilizzo generale

SQLite (1) è una libreria in grado di fornire le funzionalità di un DBMS relazionale, basato sul linguaggio SQL, utilizzando come basi di dati dei file singoli. In pratica, SQLite gestisce una basi di dati intera in un file singolo, senza alcuna amministrazione esterna; pertanto, le utenze e i privilegi sono definiti dal sistema operativo, in quanto gli accessi sono regolati dai permessi del file che contiene la basi di dati.

In qualità di libreria, SQL consente ai programmi che la utilizzano di avere accesso a una basi di dati anche senza bisogno di collegarsi a un servizio DBMS tradizionale, facilitando così la realizzazione di piccoli progetti.

Di norma, la libreria SQL è accompagnata da un programma per l'esecuzione interattiva di istruzioni SQLite, che consente di accedere alle sue basi di dati in modo generalizzato.

704.1   Utilizzo di «sqlite3»

Per creare o accedere a una basi di dati di SQL, si può usare il programma sqlite3, o sqlite nelle versioni più vecchie, che accompagna normalmente la libreria vera e propria:

sqlite3 [opzioni] [file_base_di_dati]

Generalmente, alla fine della riga di comando si indica il nome del file base di dati a cui si vuole accedere; se poi il file non dovesse esistere, il fatto di nominarlo implicherebbe comunque la sua creazione (come base di dati vuota). Se il nome di questo file non viene fornito attraverso la riga di comando, occorre usare un'istruzione apposita, durante il funzionamento di sqlite. L'esempio seguente mostra l'avvio e la conclusione del programma, allo scopo di accedere alla base di dati contenuta nel file mia_prova.db:

sqlite3 mia_prova.db[Invio]

SQLite version ...
Enter ".help" for instructions

sqlite3> .quit[Invio]

Come si può intendere, si tratta di un programma che si comporta sostanzialmente come altri programmi frontali simili, usati per accedere in modo diretto ad altri DBMS basati su SQL.

Tabella 704.2. Alcune opzioni per l'avvio di sqlite3.

Opzione Descrizione
-init file
Consente di indicare un file contenente comandi per sqlite3; può trattarsi di comandi interni al programma, oppure di istruzioni SQL.
-column
Richiede di mostrare i risultati in modo incolonnato.
-html
Richiede di generare i risultati delle interrogazioni in forma di tabella HTML.

Oltre all'uso dell'opzione -init, il programma sqlite3 può ricevere un file contenente comandi e istruzioni SQL semplicemente dallo standard input.

Tabella 704.3. Alcuni comandi interni di sqlite3.

Comando Descrizione
.help
Mostra una guida interna all'uso del programma.
.exit
.quit
Termina il funzionamento del programma.
.dump [relazione]...
Consente di «scaricare» il contenuto della base di dati, oppure delle sole relazioni indicate, generando le istruzioni necessarie a ricostruire le informazioni relative.
.read file
Legge ed esegue i comandi contenuti nel file indicato.
.mode column
Fa in modo di visualizzare il risultato delle interrogazioni in una forma incolonnata.
.mode list
Fa in modo di visualizzare il risultato delle interrogazioni nel modo usuale di sqlite3.
.header on
.header off
attiva o disattiva l'intestazione delle colonne.

704.2   Copie di sicurezza

È evidente che la copia di una base di dati realizzata con SQLite è un'operazione molto semplice, essendo tutto contenuto in un file. Tuttavia, per garantire la trasferibilità in un'architettura differente, è necessario procedere alla generazione di un file di testo contenente le istruzioni SQL con cui poi ricostruire la base di dati. Si ottiene lo scarico in questa forma usando il comando .dump:

echo ".dump" | sqlite3 file_base_di_dati > file_sql

Per esempio, per generare il file backup.sql dalla base di dati contenuta nel file mio.db, si potrebbe usare il comando seguente:

echo ".dump" | sqlite3 mio.db > backup.sql[Invio]

Quello che si ottiene nel file backup.sql potrebbe avere l'aspetto seguente:

BEGIN TRANSACTION;
CREATE TABLE Indirizzi (codice integer, cognome char(40), \
  \nome char(40), indirizzo varchar(60), telefono varchar(40)); INSERT INTO "Indirizzi" VALUES(1, 'Pallino', 'Pinco', \
  \'Via Biglie, 1', '0222,222222'); ... CREATE TABLE presenze (codice integer, giorno date, \
  \ingresso time, uscita time); INSERT INTO "presenze" VALUES(1, '2005-09-17', '11:20:00', '13:30:00'); ... CREATE VIEW ingressi as select indirizzi.cognome, indirizzi.nome, \
  \presenze.giorno, presenze.ingresso \
  \from indirizzi, presenze \
  \where indirizzi.codice = presenze.codice; COMMIT;

Per ricostruire una base di dati da un file del genere, basta fornire il file a sqlite3 dallo standard input:

sqlite3 file_base_di_dati < file_sql

Per esempio, per creare una base di dati nuova nel file nuova.db, a partire dallo stesso file appena creato, si potrebbe usare il comando seguente:

sqlite3 nuova.db < backup.sql[Invio]

704.3   Accesso simultaneo a più basi di dati

SQLite consente di accedere a più di una basi di dati alla volta. Per fare questo è disponibile un'istruzione SQL che non è standard:

ATTACH [DATABASE] file_base_di_dati AS nome_interno

In pratica, si indica il file della basi di dati a cui collegarsi, tenendo conto che può essere necessario indicarlo tra virgolette, ma le si deve associare un nome. Nell'esempio seguente, durante il funzionamento di sqlite3 viene collegata la basi di dati contenuta nel file seconda.db, associandola al nome seconda:

sqlite> ATTACH 'seconda.db' AS seconda;[Invio]

La base di dati già aperta all'atto dell'avvio di sqlite3 acquista automaticamente il nome interno main. La distinzione delle basi di dati con questi nomi interni, consente di accedere a relazioni che altrimenti avrebbero lo stesso nome: per indicare la relazione indirizzi della base di dati seconda, si indica seconda.indirizzi; per indicare la relazione con lo stesso nome, contenuta nella base di dati aperta all'avvio del programma, si indica main.indirizzi. Comunque, si osservi che non è necessario indicare dei nomi completi della base di dati se non ci sono ambiguità tra le relazioni.

Eventualmente, per chiudere il collegamento con una base di dati c'è un'altra istruzione:

DETACH [DATABASE] nome_interno

704.4   Riferimenti


1) SQLite   dominio pubblico


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome sqlite_utilizzo_generale.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory