Mi az SQLite? Terhelhető, beágyazható nagy teljesítményű, fájl alapú (mindegyik adatbázis-kezelő rendszer a fájlrendszeren tárolja az adatokat de nem egy fájlban) relációs adatbázis-kezelő rendszer. Aki már ismeri a szintén ingyenes MySQL vagy a PostgreSQL adatbázis-kezelő rendszerek valamelyikét, nem fog idegen terepre tévedni.
Hivatalos honlapja: http://www.sqlite.org Szabvány, támogatás, syntaxis: SQL92 http://en.wikipedia.org/wiki/Star_schema http://www.sqlite.org/lang.html http://www.kooz.biz/rkowen/howto/sql92.html Licenc kérdések: http://www.sqlite.org/copyright.html Szabadon felhasználható bármilyen célra, bármely rendszeren. Fejlesztője: A projekt 2000-ben kezdődött D. Richard Hipp Hwaci – Applied Software Research http://hwaci.com programnyelv: C Milyen Operációs rendszeren működik?:Windors, Linux, Unix, Mac-OsX, Solaris stb.. 16-32-64 bites változatok Támogatott karakter kódolások: UTF-8; UTF-16 Adminisztrációt segítő alkalmazások: (GUI tools) http://sqliteadmin.orbmu2k.de az egyik legjobb admisztrációs eszköz SQLite-hoz
http://sourceforge.net/projects/sqliteman/ he best developer’s and/or admin’s GUI tool, win, linux letöltés http://sqlitebrowser.sourceforge.net/
http://sourceforge.net/projects/sqlitequery/
SQLiteManager Többnyelvű alkalmazás SQLite database manager követelmények PHP4, PHP5 Platformok: Mac, Win, Linux http://sourceforge.net/projects/sqlitemanager/ Projekt oldal: http://www.projektfarm.com/sqlitewebadmin/
SQLite Admin SQLite adminisztrációs eszköz, grafikus felülettel. PHP nyelven íródott. Telepítési követelmények: PHP5 vagy nagyobb verziószám műveletek: INSERT, UPDATE, DELETE, CREATE stb.. http://sourceforge.net/projects/sqlite-admin/
http://sourceforge.net/projects/gtksql/ GTKSQL Platform: Linux
Java SQLite Adminsztráicós program. Alap műveletek: row hozzádás, row szerkesztés, row törlés Adatbázis kérések – query databases Adatbázis létrehozása/tábla létrehozás – Create databases/tables Adat mentés, betöltés / import/export data dump data (~ sql export) http://jsqlitemyadmin.sourceforge.net/ ezSqliteAdmin PHP & XUL nyelven íródott Futtatható Mozilla platformon http://sourceforge.net/projects/ezsqliteadmin/
Mégtöbb hasonló ingyenes projekt: http://sourceforge.net oldalon Technikai kérdések: Hogy Készítsünk Auto-increment-elt mezőt: id INTEGER PRIMARY KEY Last insert Id sqlite_last_insert_rowid() = mysql_insert_id() Bináris adatok: Bináris adatokat is tárolhatunk az adatbázisban, tárolásuk csak az első NULL értékig történik meg. A bináris adatokat elsőként kódolni kell. base64_encoding(), Sqlite rendelkezik saját függvényekkel erre a célre: sqlite_encode_binary(), sqlite_decode_binary() Karakter kódolás alkalmazása minden létrehozott táblára, információk a rendszerről: Az Sqlite adatbázisról, táblákról rendszerről a PRAGMA kulcsszóval nyerhetünk információt. PRAGMA encoding = “UTF-8″; http://sqlite.org/pragma.html#syntax Pragma funkciók: Nagyon hasznos funkció ha be van kapcsolva PRAGMA auto_vacuum; PRAGMA auto_vacuum = 0 | 1; Nagyobb cache_size értéket adva nő a memória az erőforrásigény de a teljesítmény is. Alapértelmezett lapok száma: 2000 amit * 1,5 K foglal el a memoriából/lappal számolhatunk PRAGMA cache_size; PRAGMA cache_size = Number-of-pages; A funkció bekapcsolásával elérhető az adatbázisnál az, hogy csak a rövid mezőneveket küldje. Az eset több táblát érintő lekérésnél jelenkezhet. pl.: c.id helyett a mező nemve csak id lesz. RAGMA short_column_names; PRAGMA short_column_names = 0 | 1; PRAGMA case_sensitive_like; PRAGMA case_sensitive_like = 0 | 1; PRAGMA count_changes; PRAGMA count_changes = 0 | 1; PRAGMA default_cache_size; PRAGMA default_cache_size = Number-of-pages; PRAGMA default_synchronous; PRAGMA empty_result_callbacks; PRAGMA empty_result_callbacks = 0 | 1; PRAGMA encoding; PRAGMA encoding = “UTF-8″; PRAGMA encoding = “UTF-16″; PRAGMA encoding = “UTF-16le”; PRAGMA encoding = “UTF-16be”; PRAGMA full_column_names; PRAGMA full_column_names = 0 | 1; PRAGMA fullfsync
PRAGMA fullfsync PRAGMA fullfsync = 0 | 1; PRAGMA main.locking_mode=EXCLUSIVE; PRAGMA page_size; PRAGMA page_size = bytes; teljes lista az SQLite.org honlapon. Mekkor lehet az Adatbázis méret: lehet akár több (tb 2 terabytes) terra byte is. Gyakorlatilag a rendszer maximális fájlmérete korlátja a határ. Támogatott műveletek, utasítások: INSERT, DELETE, UPDATE, and SELECT Subqueries Tables, indices, triggers, and views BEGIN, ROLLBACK, COMMIT INNER JOIN, LEFT OUTER JOIN, NATURAL JOIN UNION, UNION ALL, INTERSECT, EXCEPT UNIQUE and NOT NULL constraints Nem támogatott műveletek: CHECK constraints (parsed but not enforced) Correlated Subqueries Foreign Keys (parsed but not enforced) ALTER TABLE Some details of TRIGGER are omitted RIGHT and FULL OUTER JOIN Writing to VIEWs GRANT and REVOKE Apache-hoz saját modul: mod_auth_sqlite.so (Browser-APACHE-MOD_SQLITE-SQLITE-DB) Előnyök: a relációs adatbázis helyben van, könnyen hozzáférhető nincsenek azonosítási folyamatok beiktatva az adatbázishoz való kapcsolódáskor majdnem minden programozási nyelveben elérhető ‘PHP5 nél nem igényel komolyabb telepítése’ kis méret, skálázhatóság, optimalizálhatóság, hordozhatóság hálózati rétegeket kevésbé terheli Kevesebb memória igény mint a nagy tesóknál saját funkciók létrehozása programból és azok alkalmazása memóriában létrehozható adatbázis egyszer modosítható a működése (jól configurálható Pragma) Jól dokumentált Hátrányok: Adatbázis szerkezet nem módosítható egy lépésben. felhasználhatóság kis-és közepes projekteknél Ha sok lekérés van, kevés idő jut az adatok frissítésére, az adatok írásakor zárolva van az adatbázis, így ekkor nem lehetséges az olvasása. van megoldás: SQLite 3. Pending NFS fájlrendszeren fájl lock (ez nem az SQLite számlájára irható de mégis csak kátrány a hátrány) Milyen programnyelveből használható: Perl, Php, Python, C, Java, Visual-Basic, Delphi, .NET, gyakorlatilag minden nyelven elérhető. Milyen programnyelvben íródott: ANSI C, ~30,000 sor
Kapcsolat Cache méret adott munkamenetre: PRAGMA cache_size; beállítás: PRAGMA cache_size=5000; Adatbázis Info: adatbázisok útvonaláról: PRAGMA database_list; tábla információk: PRAGMA table_info(‘tabla_nev’); index info: PRAGMA index_info(‘index_nev’); Adatbázis karbantartás: vacuum; Visszaszerzi a törléskor felszabadított helyeket. Optimalizálja az adatbázis vagy a táblát. SQLite 3 újdonságok: SQLite API teljesen átépítve A 2 verzióhoz képest sokkal több beépített funkciót tartalmaz (2 (18), 3 (88)) Natív kódlap támogatás UTF-8 és UTF-16 Hibakezelés Teljesen különbözik az előző verzióktól, előnyére. (gyorsabb, frissebb, lágyabb, jobb:) Biztonsági kérdések: adatbázis fájlok elhelyezése a public_html vagy www mappán kívülre vagyis weboldalról ne lehessen elérni. Biztonság kapcsolódáskor: sqlite_open() éles rendszeren figyeljük oda a hibakezelésre, ne írjuk ki a csinos hibaüzeneteket, mert nagyon beszédes tud lenni. Kezeljük le rendesen ha kell vizsgáljuk meg a fájlt hogy tényleg ott van-e a helyén, a nem található egy DIE(„hibaüzivel szia van.”) .htaccess: ha használhatunk ilyet, avagy bizuk a piszkosmunkát az Apache-ra # letiltjuk az olyan fájlkiterjesztéseket mik senzitív adatot tartalmaznak és böngészőben megjelenne # pl.: a akarmi.sqlite kiterjesztésű fájl külső megtekintése nem egedélyezett APACHE FilesMatch tanulmányozása erősen ajánlatos Leírás itt Deny from all Egyéni hibaoldalak: lekezelve az esetleges eredménytelen kéréseket ErrorDocument 404 http://sajatdomain.hu/403page.html ErrorDocument 403 http://sajatdomain.hu/403page.html Tiltsuk le a könyvtárak böngészését is, ez amúgy is egy gázos dolog. # – (minusz) letiltja a betekintést. + (plusz) megengedi a mappák böngészést Options -Indexes Határozzuk meg az index fájlt a webszervernek # az értelmezés balról jobbra történik, határozzuk meg a #webszervernek a kezdő fájlt elsőként a default.html-keresi DirectoryIndex default.html index.html index.php Beépített funkciók: abs(X) Return the absolute value of argument X. coalesce(X,Y,…) Return a copy of the first non-NULL argument. If all arguments are NULL then NULL is returned. There must be at least 2 arguments. glob(X,Y) This function is used to implement the “X GLOB Y” syntax of SQLite. The ifnull(X,Y) Return a copy of the first non-NULL argument. If both arguments are NULL then NULL is returned. This behaves the same as coalesce() above.
hex(X) The argument is interpreted as a BLOB. The result is a hexadecimal rendering of the content of that blob. last_insert_rowid() Utolsó INSER művelet ID-vel tér vissza. Return the ROWID of the last row insert from this connection to the database. This is the same value that would be returned from the sqlite_last_insert_rowid() API function. length(‘alma’);–4 String hosszával tért vissza Return the string length of X in characters. If SQLite is configured to support UTF-8, then the number of UTF-8 characters is returned, not the number of bytes. like(X,Y);like(X,Y,Z);mezo LIKE(“%szo1%[itt_space_van]%szo2%”); This function is used to implement the “X LIKE Y [ESCAPE Z]” syntax of SQL. If the optional ESCAPE clause is present, then the userfunction is invoked with three arguments. Otherwise, it is invoked with two arguments only. The sqlite_create_function() interface can be used to override this function and thereby change the operation of the LIKE operator. When doing this, it may be important to override both the two and three argument versions of the like() function. Otherwise, different code may be called to implement the LIKE operator depending on whether or not an ESCAPE clause was specified. load_extension(X);load_extension(X,Y) ; Load SQLite extensions out of the shared library file named X using the entry point Y. The result is a NULL. If Y is omitted then the default entry point of sqlite3_extension_init is used. This function raises an exception if the extension fails to load or initialize correctly. lower(X) Kisbetűsre konvertálja a stringet Return a copy of string X will all characters converted to lower case. The C library tolower() Nem müxik jól UTF-8 kódolásnál routine is used for the conversion, which means that this function might not work correctly on UTF-8 characters. max(X,Y,…) Return the argument with the maximum value. Arguments may be strings in addition to numbers. The maximum value is determined by the usual sort order. Note that max() is a simple function when it has 2 or more arguments but converts to an aggregate function if given only a single argument. min(X,Y,…) Return the argument with the minimum value. Arguments may be strings in addition to numbers. The minimum value is determined by the usual sort order. Note that min() is a simple function when it has 2 or more arguments but converts to an aggregate function if given only a single argument. nullif(X,Y) Return the first argument if the arguments are different, otherwise return NULL. quote(X) This routine returns a string which is the value of its argument suitable for inclusion into another SQL statement. Strings are surrounded by single-quotes with escapes on interior quotes as needed. BLOBs are encoded as hexadecimal literals. The current implementation of VACUUM uses this function. The function is also useful when writing triggers to implement undo/redo functionality. random(*) Véletlen számot generál, lehet használni LIMIT nél LIMIT random() Return a pseudo-random integer between -9223372036854775808 and +9223372036854775807. replace(X,Y,Z) Kicserél részletet a stringben Return a string formed by substituting string Z for every occurrance of string Y in string X. The BINARY collating sequence is used for comparisons. randomblob(N) Véretlenke Blob; Return a N-byte blob containing pseudo-random bytes. N should be a postive integer. round(X);round(X,Y) ; Kerekíti az X ben megadott számot. Round off the number X to Y digits to the right of the decimal point. If the Y argument is omitted, 0 is assumed. soundex(X) ;
soundex(X) ; Hogyan hangzana ez a szó kimondva. Compute the soundex encoding of the string X. The string “?000″ is returned if the argument is NULL. This function is omitted from SQLite by default. It is only available the -DSQLITE_SOUNDEX=1 compiler option is used when SQLite is built. sqlite_version(*) Return the version string for the SQLite library that is running. Example: “2.8.0″ substr(X,Y,Z) ; visszadja az (substr(‘alma’, 1,2); ) alma szóból a 1. karaktertől (a) 2 karekter hosszúságban. eremény al Return a substring of input string X that begins with the Y-th character and which is Z characters long. The left-most character of X is number 1. If Y is negative the the first character of the substring is found by counting from the right rather than the left. If X is string then characters indices refer to actual UTF-8 characters. If X is a BLOB then the indices refer to bytes. trim(X);trim(X,Y); Levágja a speciális karaktereket az eredmény bal és jobb oldaláról (spacen,rt..) Return a string formed by removing any and all characters that appear in Y from both ends of X. If the Y argument is omitted, spaces are removed. rtrim(X);rtrim(X,Y); Levágja a speciális karaktereket az eredmény jobb oldaláról (spacen,rt..) Return a string formed by removing any and all characters that appear in Y from the right side of X. If the Y argument is omitted, spaces are removed. ltrim(X);ltrim(X,Y); Levágja a speciális karaktereket az eredmény bal oldaláról (spacen,rt..) Return a string formed by removing any and all characters that appear in Y from the left side of X. If the Y argument is omitted, spaces are removed. typeof(X) Return the type of the expression X. The only return values are “null”, “integer”, “real”, “text”, and “blob”. SQLite’s type handling is explained in Datatypes in SQLite Version 3. upper(‘string’) a megadott stringet nagybetűsre alakítja Return a copy of input string X converted to all upper-case letters. The implementation of this function uses the C library routine toupper() which means it may not work correctly on UTF-8 strings. zeroblob(N) Return a BLOB consisting of N bytes of 0×00. SQLite manages these zeroblobs very efficiently. Zeroblobs can be used to reserve space for a BLOB that is later written using incremental BLOB I/O. SQLite Saját funkciók (functions) létrehozása PHP-ben: 1. 2. 3. 4. 5.
//sting bemenet visszatérési érték md5(string) egyszerű php függvény function the_md5_func($string) { return (md5($string)) }
1. 2. 3. 4. 5.
//ismertetjük az adatbázis-kezelő a funckióval //md5_funct néven fogjuk hívni a query-ben //the_md5_funct a tényleges funkció neve //$link az adatbázishoz való kapcsolódáskor kapott erőforrás azonosító sqlite_create_function($link,’md5_funct’, ‘the_md5_funct’);
//és használjuk programból SELECT md5_funct(‘a’) as ertek így az adatokon gyakorlatilag bármilyen változtatást, ellenőrzést végrehajthatunk. Egy kis PHP: Kapcsolódás az adatbázishoz: fajl a fájl neve utvonala Jogosultság rw-rw-rwvisszatértő hibaüziknek $errmsg
visszatértő hibaüziknek $errmsg ha nem sikerül a függvény false értékkel tér vissza. Ahol az adatbázis fájl elhelyezkedik további jogosultságra lesz szükség, mert menet közben (az adatbázisba való íráskor) néhány ideiglenes fájl is keletkezik, amely a művelet végrehajtása után törlődik, de ha nem tud létrejönni akkor a művelet is meghiúsul. Speciális eset: fájlnév helyett :memory: kifejlezéssel egy a memoriában létező adatbázist hozhatunk létre. $link=sqlite_open(fajl,jogosultsag, $errmsg); if($link==false)die(„kapufa”); Egyszerre több eredmény nélküli parancs is futtatható: ; pontosvesszővel határold kéréseket küldhetünk csoportosan az adatbázis kiszolgálónak akár fájlból is feltölthetjük és futtathatjuk. sqlite_exec($query, $link); //utasítással Eredemény halmaz típusok: SQLITE_ASSOC – A mező nevén lesz az érték array[„mezonev”]=ertek SQLITE_BOTH – mindkettő bent lesz a listában (kicsit tulzónak tartom) SQLITE_NUM – sorszám alapján rendezi a tömböt $array[0]=eretek, Hasznos eredményfeldolgozó utasítások: sqlite_fetch_all($result); Többdimenziós tömbbe gyűjti a teljes eredménylistát, nem kell utólag tömböt fabrikálni belőle. Hasznos utasítás. LIMIT használata erősen ajánlott mert a tömb rengeteg memóriát megehet. sqlite_array_query($query, $link, Type(SQLITE_ASSOC…)) paraméterek: query, link, adat formátum figyelem a query van elől sqlite_query nek és az sqlite_fetch_all függvények összevonása A LIMIT OPCIÓT itt ajánlott használni. A kis mennyiségű eredményhalmazhoz (30-40 rekordot tartalmazó) nyújt hatékony segítséget, nagyobb mennyiségű adatnál saját kód. sqlite_fetch_single ($result) vissza adja az eredmény 1. értékét pl.: SELECT COUNT(id) as c FROM… GROUP BY… $c=sqlite_fetch_single ($result); PHP5 tartalmazza kisebb verziónál telepíteni kell. sqlite_fetch_array($result, data_type) visszadja az eremény 1 sorát sqlite_escape_string($string) levédi az idézőjeleket visszaperjelekkel Nagyon hasznos funkció ajánlott mindig használni a képek az eredeti projekt oldalakról származnak. nincs kapcsolódó bejegyzés.
Téma: Webalkalmazás fejlesztés Forrás: http://opendir.hu Szerző: ArtH2O Erdeti URL: http://opendir.hu/webalkalmazas/sqlite/171-sqlite-emlekezteto-jegyzet/