2009.04_SQLite – lekka alternatywa_[Bazy Danych].pdf

(1156 KB) Pobierz
332762935 UNPDF
Bazy danych
SQLite – lekka alternatywa
– lekka alternatywa
Sławomir Stępień
Ogromne i nowoczesne bazy danych, które dziś stanowią trzon rynku tych produktów stają się z
każdym dniem coraz bardziej skomplikowane i nieprzyjazne dla zwykłego użytkownika. Proste operacje
wstawiania czy wyszukiwania danych stają się tak zawiłe, że wielu zwykłych użytkowników bez pomocy
fachowca nie jest w stanie ich wykonać.
łego serwisu WWW lub dla potrzeb małej
irmy może się stać zadaniem prawie nie
wykonalnym i na pewno drogim, jeśli za-
mierzamy zapłacić komuś za pomoc. Spowodowane jest
to tym, że takie bazy wymagają wielogodzinnej konigu-
racji, a w czasie działania potrzebują administracji. Gdy
już wszystko szczęśliwie uruchomimy okaże się, że ba-
za po prostu się marnuje, bo korzystamy z niej w bardzo
ograniczony sposób. Okazuje się też, że programowanie z
użyciem bazy danych wiąże się także z problemami, gdyż
stworzona tak baza jest porozcinana na wiele plików, a jej
przenośność jest mała.
Sytuacja marnowania możliwości bazy danych występu-
je bardzo często. Ogromna większość stron internetowych to
strony, które nie mają dużej ilości wejść dziennie, a zatem
nie potrzebują skomplikowanych baz danych do ich obsługi.
Podobnie wygląda sprawa z wykorzystaniem baz danych w
różnego rodzaju irmach czy w programowaniu. Mało jest ta-
kich irm lub programów, które wykorzystają skomplikowa-
ną bazę w pełen sposób. W takich sytuacjach warto poszukać
jakieś lekkiej alternatywy dla naszej skomplikowanej bazy.
Jedna z bardziej popularnych, darmowych, bardzo dobrych
i lekkich baz danych to biblioteka SQLite. Biblioteka ta im-
plementuje prosty silnik relacyjnych baz danych oparty o ję-
zyk SQL92. Budowa biblioteki pozwala na wykorzystanie jej
możliwości w różnych sytuacjach, a gotowy program wyko-
rzystujący ją może posłużyć jako narzędzie do nauki obsłu-
gi baz danych.
Budowa i przeznaczenie
Budowa i przeznaczanie SQLite są ze sobą ściśle związane.
SQLite od początku swojego istnienia skupiał się na mini-
malizacji i prostocie. Wszystko co jest potrzebne do obsługi
bazy danych za pomocą SQLite to tylko jeden program (lub
jedna biblioteka jeśli piszemy program).
Cała baza danych, którą utworzymy zapisana będzie
do jednego pliku, który dzięki swojej budowie będzie
działał na maszynach z różną kolejnością bitów (Big-
endian/Little-endian). Nic nie stoi na przeszkodzie aby
utworzyć bazę danych na naszym domowym PC, a po-
tem taki plik wgrać na pendrive i zanieść do kolegi admi-
nistratora, który pracuje np. na maszynach SPARC i tam
uruchomić bazę danych. Pliku jest zapisywany w struktu-
56
kwiecień 2009
SQLite
U ruchomienie bazy danych, dla naszego ma-
332762935.034.png 332762935.035.png 332762935.036.png 332762935.037.png
 
Bazy danych
SQLite – lekka alternatywa
rze B-drzewa, co powoduje, że przeszukiwa-
nie bazy jest dobrze zoptymalizowane i szyb-
kie. Dzięki temu, że baza danych jest zapi-
sywana do pliku na dysk, nie ma już potrze-
by ustawiania uprawnień za pomocą pole-
ceń GRANT i REVOKE , gdyż ustawienia te za-
stępują ustawienia uprawnień dostępu do pli-
ku ( chmod ). Jednym słowem mówiąc – baza
będzie działać jeśli ma prawo zapisu i odczy-
tu do danego pliku.
SQLite posiada dość zaskakujący system
typów. Jeśli pracowałeś na bazach, w których
typ danych był bardzo restrykcyjny, to SQLi-
te może Cię zaskoczyć. Baza danych utwo-
rzona za pomocą SQLite używa tzw. Mani-
fest typing , czyli typ danych nie jest określa-
ny poprzez typ jaki może przyjąć dana kolum-
na lecz poprzez same dane. Dzięki tej własno-
ści (choć, niektórzy uważają to za błąd) moż-
na w pola, które powinny zawierać liczby,
wpisywać tekst, bez żadnej obawy wystąpie-
nia błędu. SQLite będzie starał się jednak za-
mienić typ na odpowiednią dla kolumny (któ-
ry dla projektanta bazy był by najlepszy), je-
śli będzie to tylko możliwe. Dzięki zastoso-
waniu takiego podejścia, programowanie w
językach, które posiadają typy dynamiczne
jest znacznie ułatwione. SQLite posiada tak-
że rekordy o zmiennej długości. Dlatego jak
do kolumny varchar (30) wpiszemy 10 zna-
ków to tylko miejsce dla 10 znaków zostanie
zarezerwowane, a nie 30. Jednak gdy do takie-
go rekordu zapiszemy więcej niż 30 znaków
to SQLite zarezerwuje odpowiednio większą
ilość miejsca bez zgłaszania błędu.
SQLite działa z zasadami ACID ( Atomici-
ty, Consistency, Isolation, Durability ). Dzięki
tym zasadom wszystkie operacje przeprowa-
dzane na bazie danych są:
kiejkolwiek komunikacji poprzez TCP/IP z
serwerem bazy (choć istnieją nakładki do-
dające tę możliwość). Baza działa jako sa-
moistny plik bez zbędnego demona, które-
go trzeba by było konigurować. Brak kon-
iguracji i administracji bazą jest także po-
dyktowane tym, że baza ma działać na różne-
go rodzaju urządzeniach i systemach wbudo-
���������
���������
���������
����������
������
����������
�������
���������
����
��������
�������������
�����
���������
���������
�������
�����������
Rysunek 1. Schemat blokowy budowy SQLite
• atomowe ( Atomicity ) – cała operacja wyko-
na się do końca lub nie wykona się wcale;
• spójne ( Consistency ) – wykonanie danej
operacji w bazie nie uszkodzi danych już
zawartych w bazie;
• izolowane ( Isolation ) – dwie operacje wy-
konywane w tym samym czasie nie mają
na siebie wpływu;
• trwałe ( Durability ) – dane zawarte w bazie
będą zachowane nawet jeśli nagle zabrak-
nie zasilania.
Wszystkie te zasady powodują, że korzystanie
z bazy jest bardzo wygodne i odporne na różne-
go rodzaju błędy.
Baza danych programu SQLite działa bez
żadnej koniguracji. Dzieje się tak dlatego, że
uprawnienia dostępu są ustawiane z poziomu
systemu operacyjnego oraz dzięki braku ja-
Rysunek 2. SQLite można wykorzystać np. do przechowywania logów systemowych
www.lpmagazine.org
57
332762935.001.png 332762935.002.png 332762935.003.png 332762935.004.png 332762935.005.png 332762935.006.png 332762935.007.png 332762935.008.png 332762935.009.png 332762935.010.png 332762935.011.png 332762935.012.png 332762935.013.png 332762935.014.png 332762935.015.png 332762935.016.png
 
Bazy danych
SQLite – lekka alternatywa
wanych oraz w programach, w których kon-
iguracja i administracja była by utrudniona.
Dlatego SQLite znajduje swoje zastosowanie
w takich urządzeniach jak PDA lub telefony
komórkowe, a także w programach takich jak
np. Mozilla Firefox. Także dzięki małym roz-
miarom (ok. 65kB) baza może pracować na
urządzeniach gdzie przestrzeń dyskowa jest
bardzo ograniczona.
Warto wspomnieć, że biblioteka spisu-
ję się świetnie jeśli chodzi o używaniu jej w
naszych programach. Cały proces utworze-
nia i obsługi bazy sprowadza się do wykona-
nia ok. ośmiu funkcji (jak zobaczymy później
można ich wykonać zaledwie trzy), a dzię-
ki braku jakichkolwiek zależności kompila-
cja programów korzystających z SQLite jest
prosta. Biblioteka działa z językami takim
jak C/C++, Tcl, a dzięki zastosowaniu roz-
szerzeń zadziała także z PHP5 (ma wbudo-
wany SQLite), Flashem, Delphi, Javą i wie-
loma innymi.
Zastosowanie SQLite dla potrzeb małego
lub średniego serwisu WWW wydaje się bar-
dzo odpowiednie. Według producenta strona,
która dziennie ma ok 100 000 wejść powinna
działać bardzo dobrze z SQLite, choć ta licz-
ba nie jest górną granicą. Producent zapewnia,
że baza będzie działać nawet z 1 000 000 wejść
dziennie.
te3-3.6.5.bin . Gdy już będziemy w stanie
uruchomić program ( ./sqlite3-3.6.5.bin ),
to korzystanie z bazy będzie możliwe. Zauważ,
że nie musisz nic konigurować aby zacząć pra-
cę. Gotową bibliotekę SQLite, możemy także
pobrać w postaci skompilowanej.
Drugi sposób to instalacja całości (progra-
mu, bibliotek i dokumentacji) ze źródeł. Jako,
że SQLite nie potrzebuje praktycznie żadnych
zależności co do innych bibliotek, jego kompi-
lacja powinna wykonać się bez problemu. Plik
zawierający kompletne źródła nazywa się sqli-
te-3.6.5.tar.gz , i możemy go pobrać ze strony
http://www.sqlite.org/download.html . Kompi-
lacja źródeł przebiega tak jak w większości
przypadków: odpakowujemy źródła polece-
niem tar xvfz sqlite-3.6.5.tar.gz , na-
stępnie wchodzimy do katalogu, który wła-
śnie rozpakowaliśmy cd sqlite-3.6.5 . Kolejny
krok to koniguracja kompilacji ./conigure .
Po poprawnym skonigurowaniu pozostaje
tylko kompilacja make i sama instalacja ma-
ke install . Instalacja ze źródeł zainstaluje
nam program sqlite3 (to tworzenia i modyi-
kacji baz danych) oraz wymagane biblioteki:
dynamiczną libsqlite3.so.0.8.6 oraz statyczna
libsqlite3.a . Jeśli chcesz maksymalnie ograni-
czyć objętość SQLite to warto zajrzeć przed
konigurowaniem do ./conigure –help , i wyłą-
czyć opcje, które nie są potrzebne.
sza baza. Jeśli podany plik istnieje wtedy pro-
gram będzie pracował z bazą zapisaną w poda-
nym pliku. Z opcjonalnych opcji jakie możemy
wybrać to m.in. możliwość wyświetlania wyni-
ków w różnych formach (kolumny, csv, html, li-
nie i lista). Pełną listę opcji z jakimi możemy
uruchomić program znajdziesz na ekranie pole-
cenia sqlite3 -help . Wszystkie opcje z jaki-
mi możemy uruchomić program oraz te, z który-
mi go nie możemy uruchomić znajdziemy nato-
miast po uruchomieniu sqlite3 i wydaniu polece-
nia .help . Znajdziemy tam m.in takie opcje jak
import danych z pliku ( .import ), zapisanie ba-
zy do pliku w formacie tekstowym języka SQL
( .dump ), wyświetlanie utworzonych tabel ( .ta-
bles ), listę baz które dołączyliśmy ( .databa-
ses ), zapisywanie wyjścia programu bezpośred-
nio do pliku ( .output ) i wiele innych. Przyjrzyj-
my się teraz ciekawszym opcjom jakie oferuje
nam ten interfejs.
Interfejs SQLite jest wyposażony w bardzo
ciekawą opcję wyświetlania danych w różnych
formatach. Pełną listę możliwości znajdziemy
w ekranie pomocy ( .help ) obok opcji .mode .
Mamy tam do wyboru:
• csv – wyświetlanie danych zawartych w
bazie oddzielonych przecinkiem (choć se-
parator danych możemy zmienić polece-
niem .separator );
• column – standardowe wyświetlanie da-
nych w kolumnach wyrównanych do le-
wej strony (szerokość kolejnych kolumn
ustalamy poleceniem .width );
• html – bardzo ciekawa forma wyświe-
tlania danych zagnieżdżonych w języku
HTML (idealnie nadaje się na wyświetla-
nie danych wprost na stronach WWW);
• insert – wyświetlanie pełnej składni SQL,
z jaką dane zostały zapisane do tabeli;
• line – czyli jedna wartość w jednej linii;
• list – lista danych oddzielona znakiem
separatora ( .separator );
• tabs – lista danych oddzielona znakiem
tabulatora;
• tcl – lista danych w formie listy elemen-
tów języka TCL.
Instalacja
Instalację SQLite możemy przeprowadzić w
dwojaki sposób. Jeśli chcemy zacząć szybko
używać tego systemu baz danych, to wystarczy,
że pobierzemy gotowy plik binarny, ze stro-
ny http://www.sqlite.org/download.html , od-
pakujemy go poleceniem gzip -d sqlite3-
3.6.5.bin.gz , a plikowi sqlite3-3.6.5.bin ,
nadamy prawo wykonywania chmod +x sqli-
Użytkowanie
Głównym programem do obsługi bazy jest pro-
gram sqlite3. Jest to zwykły interfejs tekstowy
podobny do tego z pakietu MySQL. Głównym
zadaniem tego programu jest interpretacja na-
szych zapytań w języku SQL i ich wykonywanie
na naszej bazie. Uruchomienie tego interpretera
wiąże się z podaniem paru opcjonalnych opcji
oraz nazwy pliku w którym będzie zapisana na-
Rysunek 3. Wydruk danych w formacie HTML
Kolejną bardzo przydatną opcją jest importo-
wanie danych. Importowanie danych dokonuje-
my poleceniem .import . Polecenie to przyjmu-
je dwa argumenty. Pierwszy argument to nazwa
pliku, z którego będziemy importować dane.
Drugi argument to tabela docelowa, w której zo-
staną zapisane dane. Należy pamiętać, że impor-
towanie danych jest zależne od ustawienia sepa-
ratora. Dlatego przed importowaniem danych
upewnij się, że poprawnie ustawiłeś znak sepa-
ratora oraz czy jest on zgody z tym jak dane są
58
kwiecień 2009
332762935.017.png 332762935.018.png 332762935.019.png
 
Bazy danych
SQLite – lekka alternatywa
separowane w pliku z danymi. Jeśli chcesz zapi-
sywać logi systemowe do bazy to możesz zasto-
sować jako separator pola znak | . Pamiętaj jed-
nak, że należy odpowiednio zmodyikować plik
wejściowy z logami.
Przydatne może okazać się także zapisy-
wanie poszczególnych tabel lub całej bazy w
postaci języka SQL do pliku tekstowego. Efekt
taki możemy uzyskać ustawiając wyjście pro-
gramu na plik tekstowy .output nazwa_pliku , a
następnie wydając polecenie .dump (opcjonal-
nie podając jako argument nazwę tabeli w po-
staci zapytania LIKE ). Tak zapisany plik może-
my potem bez problemów odczytać wykonując
polecenie .read , podając jako argument nazwę
pliku z kodem SQL. Aby powrócić do wyświe-
tlania wyników na ekran a nie do pliku wydaj
polecenie .output stdout .
SQLite posiada także nie standardowe
rozszerzenia języka SQL98 takie jak:
Listing 1. Przykładowy program napisany przy użyciu biblioteki SQLite3
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback ( void *NotUsed, int argc, char **argv, char
**azColName )
{
NotUsed = 0;
int i;
for ( i = 0; i < argc; i++ )
{
/*
* Wypisz kolumny i ich wartosci lub NULL jesli wartosc rowna jest zero
*/
printf ( "%s = %s\n", azColName[i], argv[i] ? argv[i] : " NULL " ) ;
}
return 0;
}
• EXPLAIN – pojawienie się tego słowa przed
wyrażeniem SQL powoduje, że wyrażenie
nie zostanie wykonane, a jako wartość
zwracaną otrzymamy sekwencje instruk-
cji wirtualnej maszyny, które były by wy-
konane przy normalnym zapytaniu;
• REPLACE – jest to alias dla zapytania IN-
SERT OR REPLACE , wprowadzony dla
kompatybilności z MySQL;
• ON CONFLICT – klauzula ta pozwala na
kontrole tego co ma zrobić baza gdy na-
potka błąd podczas wykonywania pole-
cenia SQL. Pełna lista i obsługa tej ko-
mendy znajduje się na stronie http:
//www.sqlite.org/lang_conlict.html ;
• ATTACH – dzięki tej komendzie możemy do-
łączyć nową bazę. Nowa baza będzie brana
pod uwagę podczas wyszukiwania danych.
Bazę odłączamy komendą DETACH .
int main ( int argc, char **argv )
{
sqlite3 *db; /* Uchwyt */
char *zErrMsg = 0;
int rc;
if ( argc != 3 )
{
fprintf ( stderr, "Uzycie: %s BAZA_DANYCH WYRAZENIE_SQL\n", argv[0] ) ;
exit ( 1 ) ;
}
/*
* Etap pierwszy - tworzymy/otwieramy baze
*/
rc = sqlite3_open ( argv[1], &db ) ;
if ( rc != SQLITE_OK )
{
fprintf ( stderr, "Nie moge otworzyc bazy: %s\n", sqlite3_errmsg ( db )) ;
sqlite3_close ( db ) ;
exit ( 1 ) ;
}
/*
* Etap drugi - wykonujemy operacje na bazie
*/
rc = sqlite3_exec ( db, argv[2], callback, 0, &zErrMsg ) ;
if ( rc != SQLITE_OK )
{
fprintf ( stderr, "SQL error: %s\n", zErrMsg ) ;
/* Jesli dla zErrMsg byla zarezerwowana pamiec, to ja zwolnij */
if ( zErrMsg != NULL )
free ( zErrMsg ) ;
}
/*
* Etap trzeci - zamykamy baze
*/
sqlite3_close ( db ) ;
return 0;
}
Wśród wszystkich tych możliwości istnieją jed-
nak pewne braki w obsłudze języka SQL98. Jak
już wspomniałem wyżej nie ma obsługi GRANT
i REVOKE , gdyż baza jest zapisywana do pliku
na dysku. Brakuje także obsługi kluczy obcych.
Jak podaje autor zapytanie zostanie sparsowane
ale nie będzie wymuszone. Brakuje także peł-
nej obsługi komendy ALTER TABLE , oraz tyl-
ko LEFT OUTER JOIN jest zaimplementowany
ze wszystkich możliwości OUTER JOIN . Kom-
pletną listę możliwości SQL, które nie zostały
zaimplementowane znajdziesz na stronie http:
//www.sqlite.org/omitted.html.
Inną ciekawą opcją jaką SQLite imple-
mentuje są tzw. Triggers , czyli spusty, które
deiniują funkcję (złożoną z poleceń w języku
SQL), która uruchamia się podczas typowych
operacji w bazie ( DELETE , INSERT , UPDATE ).
www.lpmagazine.org
59
332762935.020.png 332762935.021.png 332762935.022.png 332762935.023.png 332762935.024.png 332762935.025.png 332762935.026.png 332762935.027.png 332762935.028.png 332762935.029.png 332762935.030.png 332762935.031.png
 
Bazy danych
SQLite – lekka alternatywa
Spusty tworzymy poleceniem CREATE TRIG-
GER . W składni tego polecenia, między BEGIN
i END deiniujemy nową funkcję, która zosta-
nie uruchomiona gdy zostanie spełniony wa-
runek uruchomienia spustu. Dzięki temu me-
chanizmowi zmiana wartości w jednej tabe-
li może wpływać na zmiany w innych tabe-
lach, co uwalnia nas od żmudnej pracy zwią-
zanej z ręczną modyikacją tabel. Wszystkie
dokładne informacje nt spustów znajdują się
na stronie http://www.sqlite.org/lang_create-
trigger.html .
Warto wspomnieć, że SQLite posiada
także nakładki graiczne oraz panele WWW.
Nakładki te ułatwiają nam pracę, bo o wie-
le łatwiej jest klikać niż wpisywać komen-
dy ręcznie, z dużym prawdopodobieństwem
popełnienia błędu, czy to składowego czy
też literowego. Pełną listę GUI znajdzie-
my na stronie http://www.sqlite.org/cvstrac/
wiki?p=ManagementTools .
niej uchwyt, który będzie potrzebny przy dal-
szym działaniu programu. Gdy baza zostanie
otworzona to funkcja ta zwraca SQLITE_OK .
W każdym innym przypadku zwracany jest
kod błędu. Funkcja sqlite3_open przyjmu-
je dwa argumenty: const char *ilename
czyli nazwę pliku w której znajduje się ba-
za danych (tą nazwę pobieramy z pierwsze-
go argumentu, który został przekazany pod-
czas uruchomienia programu) oraz sqlite3
**ppDb – czyli adres wskaźnika, który będzie
służył jako uchwyt. Nasz uchwyt nazywa się
db i jest zdeiniowany w linii: sqlite3 *db; .
Pamiętajmy, że drugi argument powinien być
adresem wskaźnika dlatego przed jego nazwą
należy wstawić operator & .
Gdy nasza baza będzie już istnieć i po-
siadamy do niej uchwyt, to możemy przejść
do wykonywania poleceń w bazie. Funkcja,
która wykonuje polecenia na bazie to sqli-
te3_exec . Funkcja ta przyjmuje jako pierw-
szy argument uchwyt do naszej bazy, następ-
ny argument to wskaźnik na string, czyli po-
lecenie w języku SQL, kolejny argument to
wskaźnik do funkcji, która zostanie wykonana
dla każdego wiersza. Prototyp tej funkcji po-
winien wyglądać następująco:
błędzie jeśli takowy wystąpił. U nas ta funk-
cja jako polecenie SQL przyjmuje drugi ar-
gument przekazany w czasie uruchomienia
programu. Należy pamiętać aby to polece-
nie, gdy zawiera więcej niż jedno słowo ująć
w cudzysłów, aby było traktowane jako je-
den argument.
Gdy już przeprowadzimy naszą operację
na bazie czas na to aby tę bazę zamknąć. Za-
mykania bazy dokonujemy funkcją sqlite3_
close podając jako jedyny argument uchwyt
do bazy (w naszym przypadku to db ).
Kompilacje tego prostego programu prze-
prowadzamy wraz z linkowaniem z biblioteką
SQLite. Oto polecenie:
gcc -W -Wall sqlite_test.c -o sqlite_
test -lsqlite3
Pamiętaj, że jeśli biblioteka nie jest wykrywana
przez linker (ld), to podaj dodatkowo ścieżkę
gdzie się znajduje w przełączniku -L np.
Biblioteka
Programowanie z biblioteką SQLite jest też
mało skomplikowane. Przyjrzymy się jedne-
mu prostemu przykładowi, który będzie dzia-
łał na zasadzie programu sqlite (czyli tworzy-
my bazę i wywołujemy na niej polecenia SQL).
Przykład jest banalnie prosty, po to aby nawet
mało zaawansowany programista mógł go zro-
zumieć. Jeśli chcesz się dowiedzieć o innych
możliwościach tej biblioteki to polecam stro-
http://www.sqlite.org/capi3ref.html , na któ-
rej znajdziesz pełen opis API.
Listing 1 przedstawia nasz prosty pro-
gram. Jego strukturę można podzielić na trzy
ważne etapy. W pierwszym etapie próbujemy
otworzyć bazę lub ją stworzyć jeśli nie istnie-
je (przypominam, że tworzymy plik). Wszyst-
ko to dokonujemy za pomocą funkcji sqli-
te3_open . Funkcja ta otwiera lub tworzy no-
wą bazę (gdy podana nie istnieje) i zwraca do
gcc -W -Wall sqlite_test.c -o sqlite_
test -L/home/dienet/liby -lsqlite3
Zwróć uwagę, że zapis o odczyt danych jest
bardzo prosty a dzięki SQL staje się bardzo
standardowy oraz przenośny bo plik bazy ta-
ki właśnie jest. Pisząc standardowy mam tu na
myśli sposób zapisu np. koniguracji programu.
Nie musimy już wymyślać własnej struktury
pliku a potem napisać odpowiedni parser (któ-
ry zapewne i tak będzie wolniejszy niż SQLi-
te). Od dziś możesz wykorzystać to tego celu
bibliotekę SQLite!
int callback(void*,int,char**,char**) ;
czyli funkcja zwraca wartość typu int , a
jej parametry to kolejno void* – wskaźnik
dla danych użytkownika, int – ilość wier-
szy, char** wartość z kolumny (uwaga
to nie jest int ) oraz char** – nazwa kolum-
ny. Czwarty argument funkcji sqlite3_exec
jest do naszej dyspozycji i pomaga nam prze-
kazać jakieś dane dla funkcji, która zostanie
wywołana dla każdego pola (jest to pierw-
szy argument formalny prototypu funkcji
callback ). Ostatni argument to wskaźnik
do stringa, który przechowuje wiadomość o
Podsumowanie
Jak widzisz można dzięki dobrej alternaty-
wie dla dużych baz danych, stworzyć coś,
co będzie działało szybko i niezawodnie
oraz będzie bardzo przenośne i mało skom-
plikowane. Nie warto bez jakiejś uzasad-
nionej przyczyny stawiać na duże i skom-
plikowane bazy gdy ich wykorzystanie bę-
dzie bardzo znikome. Lepiej zainwestować
w coś co nie wymaga godzin pracy przy
konfiguracji i administracji. SQLite jest od-
powiednim narzędziem dla ludzi, którzy ce-
nią sobie prostotę i funkcjonalność a także
dla tych, którzy chcą programować z wy-
korzystaniem baz danych jako ciekawą al-
ternatywę dla zwykłych plików w forma-
cie ASCII. SQLite to także wspaniałe na-
rzędzie do nauki zasad działania i obsłu-
gi baz danych bez niepotrzebnego procesu
konfiguracji, który znajdzie na pewno zwo-
lenników w szkołach czy na rożnego rodza-
ju szkoleniach.
W Sieci
http://video.google.pl/videoplay?docid=-5160435487953918649 – prezentacja prze-
prowadzona przez autora SQLite prezentująca możliwości programu;
http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html – strona z poradnikiem
o SQLite;
http://pl2.php.net/sqlite – strona z opisem biblioteki dla PHP.
O autorze
Autor hobbistycznie zajmuje się Linuksem już od wielu lat. Programista-samouk. Zawsze
dąży do minimalizacji wymagań sprzętowych, oraz do ogólnej optymalizacji systemu. Od
wielu lat pracuje na starych komputerach z niezłymi efektami.
Kontakt z autorem: s.stepien@interia.pl
60
kwiecień 2009
332762935.032.png 332762935.033.png
Zgłoś jeśli naruszono regulamin