< Adatbázis-kezelés

SQLite adatbázisok

Szerző: Sallai András

Copyright © Sallai András, 2017, 2018

CC Attribution-Share Alike 4.0 International

Web: http://szit.hu

Bevezetés

Az SQLite egyszerű állomány alapú adatbázis-kezelési lehetőséget nyújt. Egy adatbázis egy állomány. Nincs hálózati elérés, nincs jogosultság kezelés. Ma már szinte minden programozási nyelvben támogatott, így használata jó választás lehet. Nem sok típust támogat, kisebb projektek megfelelő adattárolója lehet, az egyszerűség jellemzi.

Telepítés

apt install sqlite3

Telepíthető dokumentáció:

apt install sqlite3-doc

Használat

Parancssorba egyszerűen írjuk be az sqlite3 parancsot. A parancs indítása után:

janos@iskolazo:~$ sqlite3
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

A parancsok „.” karakterrel kezdődnek. Néhány parancs:

.help – segítség

.quit – kilépés

.open fajlnev.db – fájl megnyitása

Az SQLite fájlokat .db kiterjesztéssel szokás ellátni, bár ez nem kötelező.

Az sqlite3 indításakor az adatbázis megadható:

sqlite3 kekzrt.db

Ha az adatbázis nem létezik automatikusan nem jön létre. A megnyitó parancs hatására viszont létrejön:

sqlite> .open kekzrt.db

Ezek után kiléphetünk és megnézhetjük az eredményt.

sqlite> .open kekzrt.db
sqlite> .quit
janos@iskolazo:~$ ls

A .show parancs megmutatja a megnyitott állományt és a hozzátartozó alapértékeket.

Az SQLite típusok

Típus	Leírás
NULL	NULL érték
INTEGER	egész szám
REAL	valós számok
TEXT	szöveg a következő kódolással: UTF-8, UTF-16BE vagy UTF-16LE
BLOB	pontosan tárolt adatok

Az SQLite persze elfogad int, varchar és hasonló típusokat, amelyeket átkonvertál. Tehát írhatunk ilyen utasításokat is:

sqlite> create table t1(a int, b varchar(100));

Tábla létrehozása

sqlite> create table dolgozok (
...> id int primary key,
...> nev text,
...> telepules text);
sqlite>

Az utasítások több sorba is írhatók. Az utasítás végét mindig „;” karakterrel jelezzük.

A táblák megtekintése:

sqlite> .tables
dolgozok
sqlite>

A táblák felépítése:

sqlite> .schema
CREATE TABLE dolgozok (
id int primary key,
nev text,
telepules text);
sqlite>

Ha több táblánk is van, de csak a dolgozók táblát szeretnénk:

sqlite> .schema dolgozok
CREATE TABLE dolgozok (
id int primary key,
nev text,
telepules text);
sqlite>

Ha az azonosítót automatikusan emelni szeretnénk integer típust kell használnunk:

sqlite> create table dolgozok (
...> id integer primary key autoincrement,
...> nev text,
...> telepules text,
...> szuletes text);
sqlite>

SQL

SQL példák:

sqlite> insert into dolgozok values (1, "Nagy János", "Szolnok");
sqlite> select * from dolgozok;

Megadható az INSERT számára milyen mezőket adunk meg:

sqlite> insert into dolgozok (nev, telepules) values ("Nagy János", "Szolnok");

A SET kulcsszó itt nem használható.

Adatok módosítása:

sqlite> update dolgozok set telepules="Szeged" where id=2;

Rekord törlése:

sqlite> delete from dolgozok where id=2;

A kimenet formázása

A select parancs kimenetében az oszlopok pipe karakterrel vannak tagolva. Ezen változtathatunk, a .mode column paranccsal:

sqlite> select * from dolgozok;
1|Nagy János|Szolnok
2|Poros Mária|Szeged
3|Fényes Gábor|Szolnok
sqlite> .mode column
sqlite> select * from dolgozok;
1 Nagy János Szolnok
2 Poros Mári Szeged
3 Fényes Gá Szolnok
sqlite>

Hátránya, hogy levágja azokat a karaktereket, amelyek nem férnek ki. Természetesen beállítható az oszlop szélessége:

sqlite> .width 3 16 10
sqlite> select * from dolgozok;
1 Nagy János Szolnok
2 Poros Mária Szeged
3 Fényes Gábor Szolnok
sqlite>

Fejléc bekapcsolása:

sqlite> .header on
sqlite> select * from dolgozok;
id nev telepules
--- --------------- ------------
1 Nagy János Szolnok
2 Poros Mária Szeged
3 Fényes Gábor Szolnok
sqlite>

Fejléc kikapcsolása:

sqlite> .header off

Visszakapcsolás az eredeti módba:

sqlite> .mode list

A list módban beállítható a szeparátor a .separator paranccsal:

sqlite> .mode list
sqlite> select * from dolgozok;
1|Nagy János|Szolnok
2|Poros Mária|Szeged
3|Fényes Gábor|Szolnok
sqlite>
sqlite> .separator ", "
sqlite> select * from dolgozok;
1, Nagy János, Szolnok
2, Poros Mária, Szeged
3, Fényes Gábor, Szolnok
sqlite>

A .mode összes parancsa
Parancs	Leírás
ascii	mezők/sorok 0x1F és 0x1E szeparátorral
csv	vesszővel szeparált értékek
column	balra igazított mezők (lásd még a .width)
html	HTML <table> kód
insert	SQL insert állítás táblához
line	egy érték per sor
list	értékek a .separator szöveggel tagolva
quote	idézőjeles, veszővel szeparálva
tabs	tabulátorral tagolt
tcl	TCL elemek listája

Írás fájlba

Írás egyszer:

sqlite> .once adat.txt
sqlite> select * from dolgozok;

A következő SQL utasítás az adat.txt fájlba íródik. Az újabb SQL utasítások kimenete már a képernyőre íródik.

Írás folyamatosan fájlba:

squlite> .output adat.txt
squlite> select nev from dolgozok;
squlite> select telepules from dolgozok;

Minden SQL utasítás kimenete az adat.txt fájlba megy. A második és a többi utasítás kimenete hozzáfűződik az adat.txt fájl végéhez.

Ha szeretnénk újra a képernyőre irányítani a kimenetet, akkor írjuk be paraméter nélkül a .output parancsot:

sqlite> .output sqlite> select nev from dolgozok; Nagy János Poros Mária Fényes Gábor sqlite>

Függelék

Grafikus felület

A grafikus felületet ugyan nem itt tárgyaljuk, de említésre méltó egy program:

apt install sqlitebrowser

PHP

PHP5 modul telepítése:

# apt install php5-sqlite

C nyelv

Telepítjük a szükséges csomagot:

# apt install libsqlite3-dev

Írjunk egy egyszerű csomagot:

#include <stdio.h> #include <sqlite3.h> static int callback(void *NotUsed, int rekordSzam, char **mezoErtek, char **mezo) { int i; for(i=0; i<rekordSzam; i++) { printf("%s: %s \n", mezo[i], mezoErtek[i] ? mezoErtek[i] : "NULL"); } printf("\n"); return 0; } int main() { sqlite3 *db; int rc; char *zErrMsg = 0; //Ha az adatbázis nem létezik, létrehozza rc = sqlite3_open("kekzrt.db", &db); if(rc) { fprintf(stderr, "Az adatbázist nem tudom megnyitni: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return(1); } rc = sqlite3_exec(db, "select * from dolgozok", callback, 0, &zErrMsg); if(rc != SQLITE_OK) { fprintf(stderr, "SQL hiba: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); }

Fordítás:

gcc -l sqlite3 -o main main.c

Futtatás:

./main

Források

http://www.sqlitetutorial.net/sqlite-insert/ (2018)

https://www.sqlite.org/ (2018)

https://www.sqlite.org/autoinc.html

https://www.sqlite.org/lang_insert.html

https://www.sqlite.org/datatype3.html

https://www.sqlite.org/quickstart.html

https://www.tutorialspoint.com/sqlite/ (2018)

https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm