Documente Academic
Documente Profesional
Documente Cultură
obiect
Curs 11 – SQLite
J
J Acest curs
› Introducere baze de date
› SQLite
J Definitii
› Bază de date (BD sau eng. DB )- ansamblu structurat de date înregistrat
pe suporturi accesibile calculatorului pentru a satisface simultan cerintele
mai multori utilizatori intr-un mod selectiv şi în timp util.
› Sistem de gestiune a bazelor de date (SGBD sau eng. DBMS) -
ansamblul de programe care permit utilizatorului sa interacţioneze cu o
bază de date.
J Introducere
› Regulile şi conceptele care permit descrierea structurii unei BD formează
modelul datelor. În timp au fost definite trei astfel de modele:
– Modelul ierarhic în care datele erau organizate sub forma unui arbore, nodurile
constând din înregistrari iar arcele referinte catre alte noduri.
– Modelul retea în care datele erau organizate sub forma unui graf orientat. Nodurile
şi arcele au aceeasi semnificaţie ca mai sus.
– Modelul relaţional în care, intuitiv, datele sunt organizate sub forma de tabele.
› Termenul de relaţie (care da denumirea modelului) provine din
matematica iar reprezentarea intuitiva a unei relaţii este o tabela.
› În cazul modelului relaţional descrierea structurii unei baze de date
consta în principal din descrierea tabelelor componente:
– denumire,
– lista de coloane
– tipul datelor din acestea.
J Introducere – constrangeri de integritate
› Descrierea poate include informaţii despre
– elementele de identificare ale înregistrarilor dintr-o tabela (cheie primara)
– coloanele comune cu alte tabele (chei straine)
– alte restricţii şi verificari de corectitudine pentru datele stocate.
› Aceste informaţii sunt cunoscute sub numele generic de constrangeri de
integritate
› Gestiunea utilizatorilor - Un SGBD trebuie sa permita crearea,
modificarea şi stergerea utilizatorilor. Operaţia este efectuata de obicei
de administratorul bazei de date.
› Concurenta la date - În cazul accesului simultan al mai multor utilizatori
la aceleasi date un SGBD trebuie sa aiba mecanisme pentru a
preintampina inconsistenta datelor
J Introducere – constrangeri de integritate
› Fie o portiune a bazei de date, notata A, în care se tine numarul de locuri
disponibile la o cursa aeriana şi doua executii ale unui program de
rezervare rulat de doua agentii de bilete diferite. Ele contin secventa:
› Read A /* se citeste numarul de locuri disponibile din BD */
› A = A – 1 /* se decrementează cu o unitate */
› Write A /* se scrie noul numar de locuri disponibile în BD */
Moment AG.1 AG.2 A in BD
T1 Read A 10
T2 Read A 10
T3 A=A–1 10
T4 A=A–1 10
T5 Write A 9
T6 Write A 9
J Introducere – constrangeri de integritate
› Orice SGBD are mecanisme prin care diversilor utilizatori sau categorii
de utilizatori li se asociaza drepturi de acces specifice la obiectele bazei
de date.
› În acest mod fiecarui utilizator i se da dreptul de a efectua doar operaţiile
specifice activitaţii sale şi doar pe acea portiune a bazei de date care
este necesara pentru acestea.
› Blocarea accesului unor categorii de utilizatori la date pe care nu
trebuie sa le acceseze. În acest fel este asigurata una dintre funcţiunile
de baza ale unui SGBD şi anume confidentialitatea datelor.
› Blocarea accesului unor categorii de utilizatori la date de care nu au
nevoie în activitatea lor, minimizându-se astfel riscul distrugerii
accidentale a datelor prin operaţii necorespunzatoare.
J
› În cazul bazelor de date de dimensiuni mari este evident ca orice
cautare care s-ar baza pe o parcurgere secventiala a înregistrarilor din
tabele ar duce la timpi de raspuns inadecvat de mari.
› De asemenea, operaţii mai complicate prin care se regasesc date
stocate în mai multe tabele legate intre ele prin coloane comune pot
duce în lipsa unor algoritmi specifici la timpi de executie
inacceptabili.
› De aceea orice SGBD are mecanisme prin care minimizează timpul de
raspuns, mecanisme bazate în special pe indecşi şi modalităţi specifice
de organizare fizica a datelor.
J Functiile unui SGBD
› Descrierea datelor
› Utilizarea datelor
› Integritatea datelor
› Confidentialitatea datelor
› Accesul concurent la date
› Siguranta în funcţionare
J Descrierea datelor
› Un SGBD trebuie sa includă posibilitatea descrierii structurii
obiectelor care formează baza de date. În cazul bazelor de date
relaţionale aceasta consta în principal în posibilitatea creerii şi modificării
structurii tabelelor şi constrangerilor de integritate asociate acestora.
› Limbajul prin care se realizează aceste operaţii se numeste Limbaj de
Descriere a Datelor (LDD) şi în cazul primelor sisteme de gestiune el
era implementat sub forma unor module separate. În sistemele
relaţionale bazate pe SQL aceste operaţii au fost incluse în limbaj sub
forma comenzilor de tip CREATE (pentru creare) sau ALTER
(modificare).
J Utilizarea datelor
› Aceasta funcţie include operaţiile de lucru cu datele înregistrate intr-o
bază de date.
› Exista patru categorii de operaţii principale:
– Inserarea de noi date. Aceasta se concretizează prin adaugarea de noi linii în
tabelele care formează baza de date.
– Stergerea de linii din tabele.
– Actualizarea datelor, insemnând modificarea continutului unor linii existente în
tabele.
– Regasirea datelor dupa anumite criterii de cautare
J SQLite
› SQLite este o librarie software ce implementeaza un motor de baze
de date SQL , independent, fara server si fara configurari
› Este cel mai raspandit motor de baze SQL de date din lume
› De ce am folosi
– Nu necesita existenta unu server de baze de date pentru a functiona
– Nu sunt necesare configurari de setup si administrare
– Este stocata intr-un singur fisier cu mici dimensiuni
– Independenta (fara dependinte externe)
– Limbajului de interogare SQL2 standard
– Este scris in C si furnizeaza un API usor de folosit
J Limitari
› Caracteristici ale SQL92 care nu sunt suportate de SQLite:
– RIGHT OUTER JOIN
– FULL OUTER JOIN
– Trigger support
– VIEWs
– GRANT and REVOKE
J Comenzi disponibile
› DDL - Data Definition Language
– CREATE – creaza o noua tabela, view sau un alt obiect in baza de date
– ALTER – modifica un obiect existent sau o tabela
– DROP – sterge o tabela intreaga, un view al unei tabele sau orice alt obiect in
baza de date
› DML - Data Manipulation Language
– INSERT – creaza o inregistrare
– UPDATE – modifica inregistrari
– DELETE – sterge inregistrari
› DQL - Data Query Language
– SELECT – obtine inregistrari din una sau mai multe tabele
J SQLite Statements
› ANALYZE - Obtine informatii statistice despre tabele si indici
ANALYZE;
or
ANALYZE database_name;
or
ANALYZE database_name.table_name;
› SELECT – interogare SQL pentru a obtine date din baza de date sub
forma unei tabele
SELECT column1, column2....columnN
FROM table_name;
› https://jar-download.com/artifacts/org.xerial/sqlite-jd
bc/3.8.11.2/source-code
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:paooL10.db");
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Opened database successfully");
}
}
J Stabilirea unei conexiuni cu baza de date
› Importarea pachetelor JDBC
› Inregistrarea driverului JDBC
› Formularea adresei bazei de date
› Crearea unui obiect conexiune
J Importarea pachetelor JDBC
import java.sql.* ; // for standard JDBC programs
J Inregistrarea driverului JDBC
› Metoda I – Class.forName()
› Metoda II – DriverManager.registerDriver()
J Class.forName("org.sqlite.JDBC");
› La crearea unei instante a unei clase folosind operatorul new se realizeaza:
– Incarcarea clasei respective in memorie daca nu este incarcata (crearea reprezentarii in
memorie a clasei respective din fisierul .class corespunzator astfel incat o instanta sa poata fi
creata. Include si initializarea variabilelor
– Crearea instantei clasei respective si stocarea adresei intr-o referinta
…
c.close();
J Crearea unei tabele
› Odata conexiunea stabilita se poate interactiona cu baza de date
› Interfetele Statement, CallableStatement si PreparedStatemen
definesc metode si proprietati ce permit trimiterea de comenzi SQL si
receptia datelor din baza de date
Interfata Recomandare
Statement General-purpose acces la baza de date
Util cand se folosest statements SQL statice la runtime
Nu accepta parametri
PreparedStatement Util atunci cand se folosesc multe statement-uri
Accepta parametri la runtime
CallableStatement Util atunci cand se doreste executia unor proceduri
J Obiecte Statement
› Creare:
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:company.db");
c.setAutoCommit(false);
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
while ( rs.next() ) {
int id = rs.getInt("id");
J String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println( "ID = " + id );
System.out.println( "NAME = " + name );
System.out.println( "AGE = " + age );
System.out.println( "ADDRESS = " + address );
System.out.println( "SALARY = " + salary );
System.out.println();
}
rs.close();
stmt.close();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Operation done successfully");
}
}
ID = 1
NAME = Paul
AGE = 32
J Operatia SELECT
ADDRESS = California
SALARY = 20000.0
ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0
ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:company.db");
c.setAutoCommit(false);
stmt = c.createStatement();
String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;";
stmt.executeUpdate(sql);
c.commit();
ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
while ( rs.next() ) {
int id = rs.getInt("id");
J String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println( "ID = " + id );
System.out.println( "NAME = " + name );
System.out.println( "AGE = " + age );
System.out.println( "ADDRESS = " + address );
System.out.println( "SALARY = " + salary );
System.out.println();
}
rs.close();
stmt.close();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Operation done successfully");
}
}
ID = 1 ID = 1
NAME = Paul NAME = Paul
AGE = 32 AGE = 32
J Old ADDRESS = California
SALARY = 20000.0 New ADDRESS = California
SALARY = 25000.0
ID = 2 ID = 2
NAME = Allen NAME = Allen
AGE = 25 AGE = 25
ADDRESS = Texas ADDRESS = Texas
SALARY = 15000.0 SALARY = 15000.0
ID = 3 ID = 3
NAME = Teddy NAME = Teddy
AGE = 23 AGE = 23
ADDRESS = Norway ADDRESS = Norway
SALARY = 20000.0 SALARY = 20000.0
ID = 4 ID = 4
NAME = Mark NAME = Mark
AGE = 25 AGE = 25
ADDRESS = Rich-Mond ADDRESS = Rich-Mond
SALARY = 65000.0 SALARY = 65000.0
› New
J Operatia DELETE
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:company.db");
c.setAutoCommit(false);
stmt = c.createStatement();
String sql = "DELETE from COMPANY where ID=2;";
stmt.executeUpdate(sql);
c.commit();
ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
while ( rs.next() ) {
int id = rs.getInt("id");
J String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
float salary = rs.getFloat("salary");
System.out.println( "ID = " + id );
System.out.println( "NAME = " + name );
System.out.println( "AGE = " + age );
System.out.println( "ADDRESS = " + address );
System.out.println( "SALARY = " + salary );
System.out.println();
}
rs.close();
stmt.close();
c.close();
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Operation done successfully");
}
ID = 1 ID = 1
NAME = Paul NAME = Paul
AGE = 32 AGE = 32
J Old ADDRESS = California
SALARY = 25000.0 New ADDRESS = California
SALARY = 25000.0
ID = 2 ID = 3
NAME = Allen NAME = Teddy
AGE = 25 AGE = 23
ADDRESS = Texas ADDRESS = Norway
SALARY = 15000.0 SALARY = 20000.0
ID = 3 ID = 4
NAME = Teddy NAME = Mark
AGE = 23 AGE = 25
ADDRESS = Norway ADDRESS = Rich-Mond
SALARY = 20000.0 SALARY = 65000.0
› New