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