Home / LinuxUser / 2012 / 03 / Datenbank ohne Server mit SQLite

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Debian 7.1 ist erschienen
(179 Punkte bei 5 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

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
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

1404 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zum Autor

Wolfgang Dautermann

Wolfgang Dautermann ist einer der Organisatoren der Grazer Linuxtage.


Infos zur Publikation

Infos zur Publikation

LinuxUser 07/13

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

whowatch
Nutzer und Prozesse mit whowatch überwachen
Tim Schürmann, 18.06.2013 12:49, 0 Kommentare

Wenn Administratoren herausfinden wollen oder müssen, was die Benutzer auf einem System gerade so treiben, dann hilft ihnen whowatch. Das kleine Kommandozeilenprogramm zeigt in Ec...

Aktuelle Fragen

SUSE 12.3 64Bit: Miro funzt nicht
Wimpy *, 14.06.2013 13:05, 4 Antworten
Seit Installation von openSUSE 12.3 64Bit startet Miro nicht. (Version 5.0.4-1.24-x86_64 von Pa...
Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 4 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...