Tutorial SQLite
#1

Tutorial SQLite


Introducere
- Multi dintre voi credeti ca SQLite este foarte foarte greu de inteles, ei bine nu este asa, este chiar simplu! Am decis sa fac acest tutorial deoarece ma plictisesc si poate romanu' isi va da seama ce este mai rapid si in care system sa ai incredere.
In SQLite poti sa ai incredere 99.9% deoarece, aplicat cum trebuie, nu vei avea scurgeri de memorie sau lipsa de data.


Ce este SQLite ?
- SQLite este un fel de MySQL dar cu baza de date interna. Adica un fisier cu extensia .db. SQLite este bazat pe tabele si coloane, este foarte usor de folosit si are multe functii folositoare prin care poti face ceva mai bun decat cu metodele prin fisiere.
Denumirea de la SQL este Structured Query Language. In SQL totul este bazat pe stringuri cu functii cheie care duc la realizarea unei actiuni.
AI NEVOIE DE UN MANAGER DE BAZE DE DATE CA SA CITESTI INFORMATIA!
DESCARCA-L AICI
http://solidfiles.com/d/af325/download



Clauze de folosit:
  • Clauza CREATE TABLE IF NOT EXISTS creeaza tabelul daca nu exista, se foloseste deobicei in OnFilterScriptInit sau OnGameModeInit, sau unde vrei tu defapt.
  • Clauza FROM specifica din ce tabel sa ia anumita informatie.
  • Clauza WHERE specifica locatia unui element in tabel, de exemplu, noi vrem sa preluam data `kills` unde `nume` este 'Zh3r0'. Se foloseste ca punct de reper.
  • Clauza ORDER BY ordonoeaza o anumita coloana dupa titlu, dupa marine, crescator, decrescator.
  • Clauza SELECT seleteaza `stat`. Se poate folosi in combinatie cu FROM si cu WHERE . Gen, "SELECT * FROM `Tabel` WHERE `Name` = 'Zh3r0' ", ceea ce inseamna ca verifica daca randul unde numele este Zh3r0 exista.
  • Clauza AND se poate folosi pentru intarirea unei verificatii, gen "SELECT * FROM `Tabel` WHERE `Name`= 'Zh3r0' AND `Password` = 'blabla' ", verifica daca in `Nume` este Zh3r0 dar in acelasi timp `Password` sa aiba 'blabla'
  • Clauza UPDATE updateaza un rand din tabel.Daca randul nu exista, nici-o actiune nu v-a fi luata.
  • Clauza INSERT INTO insereaza in tabel un rand nou, chiar daca randul exista, v-a fi duplicat, de aceea trebuie sa te referi la clauza UPDATE cand vrei sa updatezi randul.
  • Clauza DELETE FROM sterge un rand din tabel, se foloseste impreuna cu clauza WHERE pentru a determina care rand v-a fi sters.
    - Exista mai multe clauze, dar eu am listat cele mai imporante si des folosite in SA-MP.

Cum sa:

Cum cream o baza de date?
Folosind functia db_open();.
Intai creeam o variabila cu tagul DB: deoarece vrem ca variabila sa fie recunoscuta ca asociat al SQL.
Scrie in topul scriptului

pawn Код:
new DB:Database;
Dute la callbackul OnFilterScriptInit() daca e FS sau OnGameModeInit() daca e GM
Adauga urmatorul cod:
pawn Код:
Database = db_open("Database.db");
Codul de mai sus v-a creea baza de date daca nu exista si o v-a deschide daca exista pentru a putea primi informatii, sau a da informatii.
Sub acel cod adauga asta:
pawn Код:
db_free_result(db_query(Database, "CREATE TABLE IF NOT EXISTS `Tabel` (`Nume`, `Bani`, `Ratio`)"));

Codul de mai sus, v-a creea tabelul `Tabel` in fisierul Database.db din scriptfiles daca nu exista.In acelasi timp v-a adauga 3 coloane, cele enumerate in ( ).
Succes! Ai creat o baza de date dar in acelasi timp ai adaugat si 3 coloane!

Ce inseamna db_query() si db_free_result()?
pawn Код:
db_query()
Cu aceasta functie se poate scrie dar si citi in acelasi timp, depinde de ce ai scris in acel string, si ce clauza ai folosit.

pawn Код:
db_free_result()
Trebuie sa te asigur ca de fiecare data, cand citesti, sau scri intr-o baza de date, sa eliberezi rezultatele, altfel s-ar puea sa intampini buguri sau o scurgere de memorie, ceea ce cred ca nu ai vrea sa se intample!


Cum scriu intr-o baza de date?

Folosind functia db_query().
Ca exemplu sa luam OnFilterScriptInit() si sa lucram acolo.

Nu trebuie sa deschidem baza de date cu functia db_open() deoarece ea a fost deschisa la initierea fiserului.
Hai sa scriem ceva in acele 3 coloane in tabelul numit Tabel.
pawn Код:
//Cream un string numit Query cu care v-om putea dauga date, gen Numele jucatorului, Scoru, killurile etc.
new Query[129];

//Formata stringul cu numele si toate cele ca dupaia sa folosim db_query() pentru a le scrie.
format(Query, sizeof(Query), "INSERT INTO `Tabel` (`Nume`, `Bani`, `Ratio`) VALUES('%s', '%d', '%f')", ("Zh3r0"), 500, Float:555 / Float:34);

//Acum sa scriem in baza de date ce am scris mai sus, bine nu chiar, codu de sus v-a fi transformat intr-o comanda pe care bazele de date le inteleg si le transforma in ceva psihic si le proceseaza si iese un rand nou.
db_query(Database, Query);

//Daca vrei sa fi sigur ca eliberezi orice ramasita de informatie, fa astfel.
db_free_result( db_query(Database, Query) );//In acelasi timp eliberam informatia care nu este necesara si actionam.
Puteti deschide acum fisierul Database.db din folderul scriptfiles din folderul cu server, deshideti fisierul cu programul pus la dispozitie mai sus la Introducere.
Cand deschideti baza de date ar trebui sa aveti asa ceva




Cum citesc dintr-o baza de date?
Acum hai sa facem o comanda prin consola ca sa evitem intrarea pe server si toate cele.
Adauga functia asta undeva in script, daca exista deja, doar ia ce e inauntru si baga acolo.
pawn Код:
public OnRconCommand(cmd[])
{
    if(!strcmp(cmd, "/start", .length = strlen("/start")))
    {
     
    }
    return 1;
}
Acum daca scri in consola /start nu se v-a intampla nimic deoarece este GOL!
Hai sa-l umplem cu codul pentru citire!
pawn Код:
if(!strcmp(cmd, "/start", .length = strlen("/start")))
{
     //Cream un string numit Query in care vom formata codul pentru preluare de informatie.
     new Query[256];

     //Creeam o variabila in care stocam rezultatul primit din db_query().
     new DBResult:Rezultat;

     //Formatam stringul Query cu datele necesare in preluarea informatiei.
     //In acest format verificam daca in tabelul `Tabel` exista un rand care contine la coloana `Nume` cuvantul Zh3r0.
     format(Query, sizeof(Query), "SELECT * FROM `Tabel` WHERE `Nume` = 'Zh3r0'");

    //Cu acest cod v-om citi ce am cerut mai sus, am scris Rezultat = pentru a stoca informatia primita in db_query pentru a verifica daca ce am scris mai sus este valid.
     Rezultat = db_query(Database, Query);

     //Acum, folosim functia db_num_rows pentru a verifica daca am primit o informatie valida sau nu, daca Zh3r0 exista in Tabel in coloana `Nume`.
     //Intai verificam daca este adevarat, daca intradevar, Zh3r0 exista in Tabel la coloana `Nume`.
     if(db_num_rows(Rezultat))
     {
           //Dam de stire ca a rezultat corect, v-a printa in consola ce am scris mai jos.
           print("Rezultatul a fost corect, Zh3r0 exista un Tabel in coloana `Nume`");
   
           //Cream un string in care stocam informatia primita din baza de date.
           new Field[30];
   
           //Cream variabilele unde vom stoca informatia.
           new Bani, Float:Ratio;

           //Acum sa preluam datele din coloana `Bani` si `Ratio` de la `Nume` egal cu Zh3r0.
           db_get_field_assoc(Rezultat, #Bani, Field, 30);

           //Strngul Field a primit acum informatia de la `Bani` unde `Nume` = 'Zh3r0'
           //O stocam intr-o variabila, poate sa fie si variabila facuta de tine, gen pInfo[playerid][Bani]
           Bani = strval(Field);//strval deoarece informatia este un string si trebuie sa devina integer.(EX: 100)
 
           //Sa prelam ratia din `Tabel` unde `Nume` = 'Zh3r0'
           db_get_field_assoc(Rezultat, #Ratio, Field, 30);

           //floatstr deoarece informatia din Field este un string si trebuie transformata intr-un float (EX: 4.7)
           Ratio = floatstr(Field);

           //Acum sa printam informatia primita!
           printf(#Bani: %d","# Ratio: %.4f, Bani, Ratio);
}
//Am preluat din `Tabel` unde `Nume` = 'Zh3r0' cu success, acum eliberam informatiile in exces!
db_free_result(Rezultat);

Acum in consola ar trebui sa apara:
Bani: 500, Ratio: 16.3235


Cum sterg o linie din tabel?

Simplu! Folosind clauza DELETE FROM.

Exemplu de stergere:
pawn Код:
db_query(Database, "DELETE FROM `Tabel` WHERE `Nume` = 'Zh3r0'");
V-a sterge toata linia unde gaseste la coloana `Nume` un string 'Zh3r0'.

Informatii utile!
  • De ce la coloane am folosit ` ` ? Deoarece, cand adaugam o coloana fara ` ` s-ar putea ca sa avem scurgeri de memorie, folosind aceste doua apaostroafe ajuta la acuratete.
  • De ce cand scriam sau citeam ceva am folosit ' ' ? La fel ca mai sus, ca informatia sa fie preciza!
  • De ce am folosit ("Zh3r0") ? Este doar un exemplu, acela poate deveni gen Name(playerid) sau pName, adica o variabila care contine numele jucatorului.
Descarca un simplu Login/Register script facut cu SQL.
DOWNLOAD AICI!

Odata descarcat, intri in joc si vei da /register <parola>.
Parola trebuie sa fie de min 5 caractere si max 24.
Odata creat contu dute in sriptfiles si deschide fisierul numit Conturi.db cu programul mentionat mai sus.
Inauntru trebuie sa aiba:


Dar cu datele tale!


### Daca aveti intrebari lasati aici si va ajut.
Reply


Messages In This Thread
Tutorial SQLite - by Zh3r0 - 08.05.2011, 18:20
Re: Tutorial SQLite - by Paul.eboy - 08.05.2011, 18:46
Re: Tutorial SQLite - by SkizzoTrick - 08.05.2011, 18:53
Re: Tutorial SQLite - by dcs.Mihai - 08.05.2011, 19:33
Re: Tutorial SQLite - by gabitzu4ever - 09.05.2011, 09:34
Re: Tutorial SQLite - by [NoV]LaZ - 09.05.2011, 12:50
Re: Tutorial SQLite - by Zh3r0 - 09.05.2011, 14:43
Re: Tutorial SQLite - by [NoV]LaZ - 09.05.2011, 15:55
Re: Tutorial SQLite - by xxmitsu - 09.05.2011, 16:05
Re: Tutorial SQLite - by Zh3r0 - 09.05.2011, 16:17

Forum Jump:


Users browsing this thread: 1 Guest(s)