AA_heart_val-j_sxc_926977.jpg

© Val-j, sxc.hu

Schmuckstück

Datenbank ohne Server mit SQLite

22.02.2012
Klein, schnell und verlässlich – mit SQLite flanschen Sie mit wenigen Handgriffen eine relationale Datenbank an Skripte und Programme.

Schon bei kleinen Mengen strukturierter Daten regt sich oft der Wunsch nach einer Datenbank. Die Hürde, einen Server aufzusetzen, hält aber nicht selten von dem an sich sinnvollen Vorhaben ab. SQLite [1] bietet einen Kompromiss zwischen Aufwand und Nutzen. Im Gegensatz zu Datenbanken wie MySQL oder Oracle handelt es sich bei SQLite nicht um eigene Server-Software, sondern um eine Bibliothek, die den Zugriff auf die in einer Datei gelagerten Daten verwaltet. Die bei anderen Datenbanken übliche Verwaltung der Berechtigungen regelt das Programm über die Zugriffsrechte zu dieser Datei.

Wie für Bibliotheken üblich bietet auch SQLite die Möglichkeit, die Software in andere Programme einzubinden. Damit stehen in diesen die Funktionen der Datenbank automatisch bereit. Daneben existieren auch Schnittstellen zu Skriptsprachen, Darunter zu Perl, PHP und Python. Schließlich gibt noch es ein Kommandozeilen-Interface, mit dessen Hilfe Sie SQLite über Shell-Befehle steuern.

Einen ähnlichen Ansatz verfolgt das Projekt Recutils [2]. Dahinter verbirgt sich ebenfalls eine Bibliothek, die den Zugriff auf die Daten verwaltet, und die wie SQLite die Möglichkeit zum Einbinden in eigene Programmen oder zum Skripten mitbringt. Die Datenbanken liegen dabei in gewöhnlichen Textdateien. Die Flexibilität der Abfragesprache SQL (siehe Kasten "Structured Query Language") steht hier, im Gegensatz zu SQLite, nicht bereit.

Structured Query Language

Die standardisierte Abfragesprache SQL kommt in vielen relationalen Datenbanken zum Einsatz, wobei die verschiedenen RDBMS üblicherweise einen mehr oder weniger großen Teil des Standards implementieren. Einführungen zu SQL finden sich zum Beispiel auf Wikibooks [7] oder auf der SQLite-Website [8]. Alternativ sehen Sie sich die Online-Videos der Stanford University zum Thema SQL und Datenbanken an [9].

SQL besteht aus einem einfachen Grundstock von Befehlen, mit denen Sie Tabellen erzeugen, füllen, ändern, Datensätze löschen oder ganze Tabellen verwerfen. Der mächtigste SQL-Befehl heißt SELECT. Eine einfache Abfrage sieht in etwa so aus:

SELECT spalte1, spalte2, spalte3 FROM tabelle WHERE spalte1 < 10;

Statt die gewünschten Spalten aufzulisten, dürfen Sie mit dem Wildcard * alle auswählen. SQL bietet auch de Möglichkeit, Felder aus mehreren Tabellen zu kombinieren:

SELECT * FROM tabelle1, tabelle2 WHERE tabelle1.feld1 = tabelle2.feld2;

Darüber hinaus bietet der Befehl die Möglichkeit zum Gruppieren oder Sortieren von Datensätzen. Über Indizes lassen sich die Suchabfragen beschleunigen.

Datenbanken bieten in der Regel unterschiedliche Feldtypen an, um die darin enthaltenen Werte korrekt zu behandeln. Unglücklicherweise erweist sich SQLite in Sachen Datentypen als sehr lax: Sie dürfen durchaus einen Text in ein als Integer definiertes Feld einfügen, SQLite stört das nicht.

Ein Datumstyp fehlt übrigens komplett. Als Alternative bietet sich entweder ein Integer-Feld an (interpretiert als Unix-Timestamp), ein Text-Feld ("YYYY-MM-DD HH:MM:SS.SSS") oder ein Real-Feld (interpretiert als Julianisches Datum). Die Tabelle "Datentypen" gibt eine Übersicht über die prinzipiell in SQLite vorhandenen Typen.

Datentypen

NULL Nullwert
INTEGER Ganzzahlwert, vorzeichenbehaftet
REAL Gleitkommawert
TEXT Zeichenkette
BLOB Speicher für beliebige binäre Daten

In der Praxis

SQLite ist Public-Domain-Software und kommt in vielen kommerziellen und freien Projekten zum Einsatz. Prominente Beispiele: Die Webbrowser Firefox, Chrome und Safari, der Mailclient Thunderbird, die VoIP-Software Skype sowie die Mobile-Betriebssysteme Android, Symbian und iOS.

Darüber hinaus verwenden Webanwendungen wie Serendipity ( Abbildung 1), Mediawiki (Abbildung 2) und viele weitere Webapplikationen und CMS-Systeme die Software. Für große, stark frequentierte Seiten bietet sich freilich der Einsatz eines echten Datenbank-Servers an. Bei kleineren Blogs oder Wikis lohnt sich aber – vor allem, wenn der Provider nur PHP, aber keine Datenbank bereitstellt – durchaus der Griff zu SQLite. Auch für erste Experimente am heimischen Linux-PC eignet sich die schlanke Datenbank bestens.

Abbildung 1: Serendipity bietet bei der Installation die Möglichkeit an, die Daten in einer SQLite-Datenbank zu speichern.
Abbildung 2: Auch Mediawiki setzt auf Wunsch auf SQLite als Grundlage.

Falls möglich empfiehlt es sich, dabei die SQLite-Datenbank in einem Verzeichnis anzulegen, das nicht direkt im Wurzelverzeichnis der Webpräsenz liegt – etwa in /var/tmp, wo die Daten nach einem Neustart erhalten bleiben. Noch besser wäre freilich ein eigenes Verzeichnis.

Ist beides nicht möglich, weil Sie nur auf das Web-Verzeichnis Schreibzugriff haben, bleibt noch die Möglichkeit, die Datenbank mittels der Datei .htaccess vor dem direkten Zugriff schützen. Serendipity beispielsweise macht das automatisch. Ein Beispiel dazu zeigt Listing 1. Haben die Datenbanken eine andere Extension als .db (.sqlite ist ebenfalls üblich) oder andere Dateien verwenden dieselbe Extension, gilt es natürlich, die Sperre aus dem Beispiel entsprechend anzupassen.

Listing 1

# .htaccess-File, um *.db-Dateien
# (SQLite)  zu schützen
<Files *.db>
    deny from all
</Files>

Auf der Kommandozeile

SQLite liegt vielen Distributionen den beiden Versionen 2.x und 3.x bei. Zwischen den zwei Entwicklungslinien hat sich allerdings das Format der Datenbankdateien geändert. Daher gilt es, darauf zu achten, dass Sie die richtige Version des Kommandozeilen-Tools (sqlite für Version 2, sqlite3 für Version 3) verwenden. Ein Konvertieren zwischen den beiden Formaten klappt aber unkompliziert (Listing 2).

Listing 2

$ sqlite3 version3.sqlite .dump | sqlite version2.sqlite
$ sqlite version2.sqlite .dump | sqlite3 version3.sqlite

Dieser Artikel behandelt, wenn nicht anders angegeben, die aktuellere Version 3. Das passende Kommandozeilen-Tool sqlite3 akzeptiert neben Optionen auch einen Dateinamen als Parameter sowie optional die Angabe eines SQL-Kommandos. Über die Optionen ändern Sie zum Beispiel das Ausgabeformat. Der einzig notwendige Parameter ist der Dateiname der Datenbank. Steht danach noch ein SQL-Befehl, führt die Software diesen auf die Datei aus.

Alternativ setzen Sie interaktiv Befehle ab. Die eingebauten Kommandos des Tools beginnen mit einem Punkt (.help listet zum Beispiel diese Befehle auf), ansonsten folgen die Befehle im Wesentlichen der bekannten SQL-Syntax mit einem Semikolon am Ende. Die Software führt diese sofort aus.

Listing 3 zeigt eine kurze Session. Dabei gibt SQLite die Datenbank aus, die in den folgenden Programmierbeispielen zum Einsatz kommt, und zwar einmal als Liste (select * from kunden;) und einmal als SQL-Dump (.dump).

Listing 3

$  sqlite3 test.sqlite
SQLite version 3.7.8 2011-09-19 14:49:19
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
kunden
sqlite> select * from kunden;
1|Max Mustermann
2|John Doe
3|Erika Mustermann
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE kunden(kdnr INTEGER PRIMARY KEY, name TEXT);
INSERT INTO "kunden" VALUES(1,'Max Mustermann');
INSERT INTO "kunden" VALUES(2,'John Doe');
INSERT INTO "kunden" VALUES(3,'Erika Mustermann');
COMMIT;
sqlite> .quit

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • CMS Kajona 3.4.0 erleichtert die Arbeit

    Das freie Web-CMS Kajona ist in Version 3.4.0 erhältlich, in die die Entwickler das Anwender-Feedback vom Linuxtag 2011 eingearbeitet haben.
  • Die richtige Datenbank finden
    MySQL oder Postgres, Firebird oder lieber doch SQLite? Die Wahl der richtigen Datenbank für den Desktop fällt nicht schwer, wenn man die Hintergründe kennt.
  • Benutzerkonten und Konfigurationsdateien nahtlos migrieren
    Zahlreiche Programme speichern in der Konfiguration absolute Pfade. Ändern Sie einen Benutzernamen und das zugehörige Home-Verzeichnis, zeigen plötzlich viele Pfade ins Leere. Unser Workshop zeigt, wie Sie das beheben.
  • Datenbanken bearbeiten unter KDE
    Datenbanken scheinen unter Linux ein gut gehütetes Geheimnis von Systemadministratoren zu sein. Dabei gibt es mit Knoda ein leicht zu bedienendes KDE-Programm, welches die Handhabung von Datenbanken auch Benutzern erschließt. Dieser Workshop liefert Ihnen den Schlüssel zum Einstieg.
  • Cvechecker sucht Security-Meldungen

    Das Tool Cvechecker, das CVE-Sicherheitsmeldungen für die installierte Software sucht, ist in Version 3.0 mit neuen Features verfügbar.
Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...