SQLite je transakční databázových systém, s nulovou konfigurací, bez serverové části, jednoduchý, kompaktní, lehký design, postavený nad souborovým systémem respektive souborem.
SQLite je velmi populární, né vždy je totiž nutné a hlavně možné nasadit plnohodnotný klient-server SQL server (Mariandb, Postgres) ale mít po ruce možnost a výhody sql nad souborem se často hodí (např. i v systému Android).
Ve své podstatě jde o implementaci relačního databázového systému a standardu SQL-92 realizovaného v jazyce C (mimochodem zajímavě napsaná knihovna s implementací objektů pomocí struktur, pointerů).

Velmi často se používá SQLite v jazyce Perl přes knihovnu DBI, ukažme si základní snippet ve kterém bude vše co je potřeba pro práci s touto databází.
- připojení /connect
- vytvoření tabulky /create
- vložení záznamu / insert
- vyhledání záznamu / search
- úprava záznamu / update
- smazání záznamu / delete
Instalace:
Debian, Ubuntu
root@havel-machine:~# apt-get install sqlite3 libdbd-sqlite3-perl
CentOS, Fedora or RHEL
root@havel-machine:~# yum install sqlite perl-DBD-SQLite
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "SQLite";
my $db_name = "sqlite.db";
my $dbd = "DBI:$driver:dbname=$db_name";
# sqlite nepoužívý jméno a heslo
my $username = "";
my $password = "";
# vytvoříme a připojíme se db
# zároveň dojte k vytvoření souboru databáze sqlite.db
my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 }) or die $DBI::errstr;
# vytvoříme tabulku
my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
HOSTNAME TEXT NOT NULL,
OS CHAR(50),
CPULOAD REAL););
# provedeme dotaz
my $ret = $dbh->do($stmt);
if($ret < 0) { print STDERR $DBI::errstr; }
else { print STDERR "Tabulka vytvořena\n"; }
# vložíme řádky do tabulky
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD)
VALUES ('linux-01', 'Debian 8', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD)
VALUES ('linux-02', 'CentOS 7', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD)
VALUES ('windows-01', 'Windows Server 2012', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
# získání dat z tabulky a výpis
$stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;);
my $obj = $dbh->prepare($stmt);
$ret = $obj->execute() or die $DBI::errstr;
if($ret < 0) { print STDERR $DBI::errstr; } while(my @row = $obj->fetchrow_array()) {
print "ID: ". $row[0] . "\n";
print "HOSTNAME: ". $row[1] ."\n";
print "OS: ". $row[2] ."\n";
print "CPULOAD: ". $row[3] ."\n\n";
}
# změna záznamu
$stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='CentOS 7';);
$ret = $dbh->do($stmt) or die $DBI::errstr;
if( $ret < 0 ) { print STDERR $DBI::errstr; }
else { print STDERR "Aktualizováno $ret řádků\n"; }
# smazání
$stmt = qq(DELETE from NETWORK where ID=2;);
$ret = $dbh->do($stmt) or die $DBI::errstr;
if($ret < 0) { print STDERR $DBI::errstr; }
else { print STDERR "Smazáno $ret řádků\n"; }
# Odpojení databáze
$dbh->disconnect();
Jak je vidět z příkladu použití je skutečně jednoduché a přímočaré, nebojte se ho vyzkoušet ve svých projektech, mnoho lidí do startu špatně odhadne požadavky a SQLite je tím pádem neprávem ignorováno jako něco podřadného, přejít na “vyšší” databáze z SQLite je triviální.
Knihovny (binding) existuje pro celou řadu programovacích jazyků kromě uvedeného Perl, např. C/C++, Python, Lua, PHP, ale např. i Delphi a další.
SQLite není okrajový zapadlý projekt, je integrován přímo do systému Android pro uložení persistentních dat, používá ho iPhone nebo společnost Airbus ve svém software či firma Adobe, Bosh, Dropbox. (https://www.sqlite.org/famous.html)
SQLite používám rád, přemýšlejte o něm.
https://www.sqlite.org
František Havel
