SQLite: il DataBase tascabile Alessandro Carichini alexsoft@riminilug.it Rimini 27 Novembre Linux Day 2005
SQL è uno standard Ogni RDBMS moderno contiene SQL Esistono diverse versioni (ISO) SQL 1992 SQL 1999 SQL 2003 Conoscerne la sintassi ci permette l'interrogazione di qualsiasi RDBMS che lo implementa
SQLite: una panoramica Libreria C sviluppata nel 2000 da Richard Hipp Motore SQL (SQL-92*) Singolo File No Server, No Client No Account OpenSource (Public Domain) Crossplatform Nessuna Configurazione da effettuare
SQLite: SQL-92* Caratteristiche SQL NON Implementate: ALTER TABLE GRANT e REVOKE RIGHT OUTER JOIN Transazioni Nidificate TRIGGER con alcune limitazioni VISTE (VIEW) in sola Lettura
Lo scopo del Dr Hipp Semplice da Amministrare Semplice da Operare Semplice da usare nei programmi Semplice da mantenere e personalizzare SMALL, FAST & RELIABLE (piccolo, veloce e affidabile)
SQLite: Linguaggi supportati C / C++ Perl PHP TCL JAVA FreePascal / Delphi Basic / Gambas Python Ruby.NET
SQLite: quale versione? Versione 2.x Stable Non è compatibile con la 3.0 Maggiormente implementata Versione 3.x Testing fino a poco tempo fa Più potente con maggiori features Non è compatibile con la 2.0 Ancora giovane e poco implementata
SQLite 2: Caratteristiche Versione attuale: 2.8.x Typeless Ogni campo è TEXT tranne PRIMARY KEY Attenzione all'operatore + su campi che vengono considerati ALFANUMERICI meglio usare La Tipizzazione è facoltativa PRIMARY KEY è INTEGER (32 bit) Lock in Lettura/Scrittura sul File
SQLite 3: Caratteristiche Versione attuale: 3.2.x Typeness NULL INTEGER REAL TEXT BLOB (encoding UTF-8, UTF-16BE, UTF-16LE) PRIMARY KEY a 64 bit Lock del File in sola Scrittura
SQLite vs Tutti Caratteristiche SQLite Firebird MySQL PostgreSQL Versione 3,2 1,5 4,1 8,1 GPL - IPL - OpenSouce / BSD - Licenza Public Domain OpenSource Commerciale OpenSource Hardware S.O. Pentium S.O. S.O. Linux/Win32/ Unix/ Win32 / Solaris/ OsX / Piattaforma OsX / FreeBSD FreeBSD Linux / Win32 Unix / Win32 SQL92 Linguaggio SQL92 Entry* SQL92 Intermedio SQL 99 Store Procedure SI SI NO SI Triggers SI SI NO SI Views SI (lettura) SI SI Transactions ACID ACID SI* ACID SMP / 64Bit SI* SI* NO SI / SI
...e le performance? 25.000 INSERT INTO ecco la classifica: SQLite 2.7 0,91 sec. MySQL 3.2 2,18 sec. PostgreSQL 7,1 4,90 sec. Fonte: http://www.sqlite.org/speed.html
SQLite: Quando Usarlo Embedded Devices Palmari (PalmOS), LinuxBox, etc.. Siti Web Soprattuto se in PHP5 Alternativa ai Text-Based XML Berkeley DB Applicazioni Ad-Hoc che utilizzino un DB
SQLite: Quando NON Usarlo Applicazioni Client/Server Manca Gestione Account Locking poco flessibile Siti Web con molto traffico Continui R/W sul file Su File System con limitazioni di dimensione del singolo file (Fat32)
SQLite: Installazione Binario/Sorgente SQLite (www.sqlite.org) sqlite Libreria Dinamica (API) libsqlite.so Eventuale installazione del modulo che aggangia la libreria in C per il proprio linguaggio preferito
SQLite: Amministrazione Command-Line sqlite e sqlite3 www.sqlite.org GUI (QT) SQLite Browser (Supporta solo la Versione 3.0) sqlitebrowser.sourceforge.net WEB SQLiteManager www.sqlitemanager.org
SQLite Command-Line Come tutte le command-line dei DBServer mysql, isql e psql Amministrazione completa: Comandi SQL Import / Export di un DB Esempio: Conversione dalla Versione 2.x alla 3.x sqlite OLD.DB.dump sqlite3 NEW.DB Integrabile in script bash come comando Unix pipe, redirect, etc..
SQLiteBrowser
SQLiteManager
Programming: PERL Modulo driver DBI Modulo CPAN DBD::SQLite2 #!/usr/bin/perl use DBI; $myfiledb = addressbook.db ; $dbh = DBI->Connect( DBI:SQLite2:dbname=$myFileDB,, ) or die( $DBI::errstr ); $sth = $dbh->prepare( INSERT INTO MYTABLE (NOME) VALUES('ALESSANDRO') ); if ($sth->execute() < 0); { print ERROR EXECUTE $DBI::errstr ; } $dbh->disconnect();
Programming: PHP PHP5 Incluso (se non compilato con without-sqlite) PHP4 Se compilato con with-sqlite Libreria PEAR (API) php.ini extension= sqlite.so Da sorgente.php con la funzione dl() dl( sqlite.so )
Esempio in PHP4 <?php?> if (!extension_loaded("sqlite")) { dl("sqlite.so"); } $hdl = sqlite_open("addressbook.db", 0666, $err); $res = sqlite_query("select * from MYTABLE", $hdl); while ($row = sqlite_fetch_array($res, SQLITE_ASSOC)){ printf("%s",$row{'nominativo'}); printf("%s",$row{'telefono'}); } sqlite_close($hdl);
SQLite Extensions SQLiteSecure Encryption Extension for SQLite www.voidbrain.com/sqlitesec.html SQLite_on_Sockets Client/Server extension www.it77.de/sqlite/sqlite_sockets.htm usqliteserver SQLite network wrapper users.libero.it/irwin/
SQLite Based AmaROK: KDE Music Player amarok.kde.org GNUnet: Ambiente P2P Anonimo www.gnunet.org BACULA: Backup/Restore di PC in LAN www.bacula.org Sql-Scripts: Database di script SQL www.sql-scripts.com...e molti altri ancora vedere su www.sqlite.org/cvstrac/wiki?p=sqliteusers
Domande?
Grazie per l'attenzione Alessandro Carichini alexsoft@riminilug.it