[[oktatas:linux:adatbázis-kezelés|< Adatbázis-kezelés]] ====== SQLite adatbázisok ====== * **Szerző:** Sallai András * Copyright (c) 2017, Sallai András * Szerkesztve: 2017, 2018 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://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 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 #include static int callback(void *NotUsed, int rekordSzam, char **mezoErtek, char **mezo) { int i; for(i=0; i 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