Kennisbank › Sqlite Nosql › Wat SQLite is
sqlite nosql starter 08 September 2026

Wat SQLite is

SQLite draait op je telefoon, in je browser, in je desktop-apps — en vrijwel niemand die het gebruikt weet dat het er is. Dat is precies de bedoeling.Dit

SQLite draait op je telefoon, in je browser, in je desktop-apps — en vrijwel niemand die het gebruikt weet dat het er is. Dat is precies de bedoeling.

Dit artikel legt uit wat SQLite is, waarom je het zou kiezen boven een serverdatabase, en wat de NoSQL-plannen van de maker wél en niet hebben opgeleverd. Voor wie overweegt SQLite in te zetten, of gewoon wil begrijpen wat er onder de motorkap zit.

Vereisten

  • SQLite 3.x — de versie die sinds 2004 de standaard is. De huidige release is 3.53.x.
  • De `sqlite3` commandoregel-tool. Op Debian/Ubuntu installeer je die met `sudo apt install sqlite3`.
  • Basiskennis van SQL. Wie tabellen en queries nooit heeft gezien, leest eerst een introductie ergens anders.

Wat SQLite is

SQLite is een relationele database-engine die geen server draait. Geen apart proces, geen netwerkpoort, geen configuratiemap. De hele database is één bestand op schijf, en je applicatie praat er direct mee via een ingebedde bibliotheek.

Dat verschilt fundamenteel van MySQL of PostgreSQL. Die draaien als zelfstandige serverprocessen waar je client-applicaties verbinding mee maken. SQLite is geen client-server-systeem — het is een bibliotheek die je linkt aan je programma. De database-engine draait in hetzelfde proces als je applicatie.

De oorsprong ligt bij D. Richard Hipp, die de engine in het voorjaar van 2000 ontwierp terwijl hij op contract voor de United States Navy werkte. De eerste versie, SQLite 1.0, verscheen op 17 augustus 2000 als een extensie voor de Tcl-scripttaal. De eerste release van de 3.x-lijn volgde op 18 juni 2004 met een herziene bestandsindeling, betere Unicode-ondersteuning en efficiëntere opslag. Sindsdien is 3.x de enige versie die nog relevant is.

Het is in C geschreven en draait op vrijwel elk platform — van microcontrollers tot servers. Je hoeft niets te installeren of te configureren. Je koppelt de bibliotheek en je hebt een werkende SQL-database.

Waarom je SQLite zou willen

Het grote voordeel is afwezigheid van beheer. Geen database-server die moet draaien, geen gebruikersaccounts, geen netwerkconfiguratie, geen backup-procedure voor een aparte service. De database is één bestand. Kopieer dat bestand en je hebt een backup. Verplaats het en je hebt je database verplaatst.

Dat maakt SQLite de juiste keuze voor lokale opslag: desktopapplicaties, mobiele apps, embedded systemen, ontwikkeltools. Overal waar één proces tegelijk toegang nodig heeft tot de data, en waar je geen server wilt onderhouden.

Het is niet de juiste keuze voor webapplicaties met veel gelijktijdige schrijvers. SQLite ondersteunt wel meerdere lezers tegelijk, maar schrijven is wereldwijd gelockt — één schrijver per keer. Voor een drukke webapplicatie met veel concurrent writes heb je een serverdatabase nodig. Voor een single-user desktop-app is SQLite sneller en eenvoudiger dan welke serverdatabase dan ook.

Een veelgehoorde vuistregel: als je applicatie op één machine draait en één proces de database gebruikt, is SQLite vaak de betere keuze. Moeten meerdere machines of processen tegelijk schrijven, dan niet.

Werken met sqlite3

De `sqlite3`-tool geeft je een interactieve sessie. Open of maak een database met:

sqlite3 mydata.db

Dit commando maakt `mydata.db` aan als het bestand nog niet bestaat, en opent het anders. Je staat nu in een SQL-sessie. Maak een tabel en voeg data toe:

CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
INSERT INTO users (name) VALUES ('alice'), ('bob');
SELECT * FROM users;

Geen server die draait, geen connectiestring, geen poort. Het bestand is de database.

Je kunt ook direct een query uitvoeren zonder interactieve sessie:

sqlite3 mydata.db "SELECT * FROM users;"

Dat is handig voor scripts en cronjobs.

ACID zonder server

SQLite ondersteunt de kern van SQL: tabellen, indices, transacties, triggers, views. En het garandeert ACID — atomiciteit, consistentie, isolatie en duurzaamheid. Ook als de stroom uitvalt midden in een transactie, blijft de database consistent. Dat is ingebouwd in de engine zelf, niet afhankelijk van een server die netjes wordt afgesloten.

Die betrouwbaarheid is de reden dat SQLite in financiële en medische software zit. Een voorbeeld: AloxBook, een Linux-desktopapp voor persoonlijke financiële boekhouding, slaat alles op in SQLite. Zonder wachtwoord is het boek een ongecodeerd SQLite-bestand. Met wachtwoord gebruikt AloxBook SQLCipher — een versleutelde variant van SQLite met AES-256-encryptie. Dezelfde engine, twee beveiligingsniveaus.

Hulpprogramma's

Naast `sqlite3` levert SQLite `sqldiff` mee. Dat toont de verschillen tussen twee SQLite-databases en genereert een SQL-script dat de ene database transformeert naar de andere. Handig bij migraties of het controleren van wijzigingen tussen ontwikkel- en productieomgevingen.

sqldiff --changeset file1.db file2.db

De NoSQL-plannen die geen realiteit werden

In 2011 kondigde D. Richard Hipp een NoSQL-interface voor SQLite aan. Tegelijk introduceerde hij UnQL, een functionele superset van SQL voor documentgeoriënteerde databases. De achtergrond was duidelijk: NoSQL-databases zoals MongoDB en CouchDB wonnen terrein, en die passen beter bij semi-gestructureerde of hiërarchische gegevens dan een star relationeel model.

Het is belangrijk om te benadrukken wat er niet is gebeurd. SQLite is geen NoSQL-database geworden. Er is geen bewijs dat de aangekondigde NoSQL-interface ooit volledig is geïmplementeerd of uitgebracht in de officiële codebase. UnQL bleef een concept. De bronnen wijzen op plannen en ideeën, niet op een functionele NoSQL-versie.

Wat wel is gekomen: de `json1`-extensie. Daarmee kun je JSON-gegevens opslaan, doorzoeken en manipuleren binnen de relationele context van SQLite. In plaats van een NoSQL-engine te bouwen, heeft SQLite documentfunctionaliteit geïntegreerd in het relationele model.

Een voorbeeld van JSON-gebruik in SQLite:

CREATE TABLE events (id INTEGER PRIMARY KEY, payload JSON);
INSERT INTO events (payload) VALUES ('{"type": "click", "page": "/home"}');
SELECT payload ->> '$.type' FROM events WHERE payload ->> '$.page' = '/home';

Je krijgt documentflexibiliteit zonder het relationele fundament op te geven. Dat kost wel iets: je verliest de mogelijkheid om op geneste JSON-velden te indexeren zoals je op kolommen zou doen. Wie veel queries op JSON-velden draait, merkt dat.

Onderhoud en tools

SQLite is geen slapend project. De releases zijn publiek gedateerd en verschijnen regelmatig. Versie 3.53.0 staat op 9 april 2026, 3.53.1 op 5 mei 2026, 3.53.2 op 3 juni 2026 en 3.53.4 op 24 juli 2026. De ontwikkelaars blijven de engine verbeteren, al ziet het er van buiten vaak hetzelfde uit.

Voor wie niet met de commandoregel wil werken, zijn er grafische tools. Air SQLite Manager, ontwikkeld door gesturedevelop, laat je door tabellen bladeren, rijen bewerken en queries uitvoeren zonder terminal. Het is beschikbaar via Flatpak, wat installatie op diverse Linux-distributies eenvoudig maakt:

flatpak install flathub io.github.gesturedevelop.AirSQLiteManager

Zulke tools verlagen de drempel, maar ze veranderen niets aan wat SQLite is: een ingebedde database die geen server nodig heeft.

Verificatie

Controleer of SQLite correct werkt en welke versie je hebt:

sqlite3 --version

Dit toont het versienummer, bijvoorbeeld `3.53.4 2026-07-24`. Daarmee weet je zeker dat de tool geïnstalleerd is en welke functionaliteit je tot je beschikking hebt.

Veelgestelde problemen

Database is vergrendeld (database is locked)

SQLite staat maar één schrijver tegelijk toe. Als een ander proces de database vasthoudt voor schrijven, krijg je deze fout. Oplossing: zorg dat je applicatie transacties kort houdt, gebruik `busy_timeout` om te wachten op een vrijgave, of heroverweeg SQLite als je veel concurrent writes verwacht.

Databasebestand is corrupt na een crash

SQLite is ontworpen om crashes te overleven, maar een database op een defecte schijf of een onderbroken kopieeractie kan beschadigd raken. Controleer met:

sqlite3 mydata.db "PRAGMA integrity_check;"

Dit commando geeft `ok` terug als de database intact is. Bij schade kun je data vaak redden met `.dump` en een nieuwe database opbouwen — maar dat werkt alleen als de schade beperkt is.

JSON-query's werken niet

De `json1`-extensie is in de meeste SQLite-builds standaard ingeschakeld, maar niet in alle. Controleer met:

sqlite3 mydata.db "SELECT json_valid('{}');"

Geeft dit `1`, dan is de extensie beschikbaar. Geeft het een fout, dan moet je een build gebruiken met `json1` ingeschakeld.

De keuze tussen SQLite en een serverdatabase is geen kwestie van beter of slechter. Het is de vraag of je een server wilt beheren. SQLite laat je die vraag ontwijken — tot het moment dat je applicatie groeit en je alsnog een server nodig hebt. Tegen die tijd heb je wel een databasebestand dat je zo kunt exporteren naar PostgreSQL of MySQL. Dat is geen toeval, maar ontwerp.

← Terug naar kennisbank
← Terug naar kennisbank