Agora
Media
Libraria Byblos



AgoraNews  





PC Magazine Ro  




NET Report   




Ginfo   




agora ON line   





PC Concrete   





Liste de discuţii   




Cartea de oaspeţi   




Mesaje   





Agora   








Clic aici
PC Report - ultimul numar aparut


IPRO - PC Magazine Romania, Noiembrie 2003
SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB

Tehnologia Java Servlets: lucrul cu bazele de date prin paghetele JDBC

Mircea Scărlătescu

Cei ce spun că în zilele noastre informaţia reprezintă puterea s-ar putea să aibă dreptate. Internetul zilelor noastre se bazează 100% pe baze de date. Aproape toată informaţia disponibilă pe situri este preluată din baze de date, acolo unde este stocată şi prelucrată.

Toate limbajele de scripting web sunt dotate cu funcţii de lucru cu bazele de date, iar un limbaj ca Java nu putea să facă excepţie de la regulă; JSP şi Servlets sunt două tehnologii ce pot foarte bine să integreze lucrul cu date preluate de la servere specializate în bazele de date.

JDBC este cuvântul magic al programatorilor Java atunci când vine vorba despre baze de date. Prescurtare de la JavaDataBaseConectivity, această serie de clase Java specializate în interogări ale bazelor de date sunt astfel concepute pentru a oferi atât o realizare rapidă şi facilă a aplicaţiilor dar şi în spiritul Java, anume acela de portabilitate.

Orice aplicaţie ce va folosi JDBC, şi aici intră şi categoria paginilor JSP şi Servleturilor va folosi o serie de funcţii incluse în clasele JDBC, indiferent de ce server de baze de date apelează, iar legătura directă cu serverul va fi facută printr-un driver JDBC, specific pentru fiecare server în parte. Aşa se face că la portarea unei aplicaţii pe o altă platformă, şi din punctul de vedere al JDBC, singura schimbare ce trebuie efectuată este cea a driverului, sursele programului nesuferind modificări. Simplu, nu? :)

Realizam în numărul trecut o aplicaţie care prelua de la utilizator o serie de date, pe care apoi un servlet le afişa ca răspuns către client. Ceea ce ne propunem acum este ca acele date pe care un utilizator le introduce să fie memorate într-o bază de date. Şi ca să menţinem aspectul ´OpenSource´ al tutorialului nostru, vom alege ca server de baze de date MySQL (pe platformă Mandrake 9.1), foarte folosit în tehnologia paginilor web. Nu vom da aici detalii despre instalare, acest proces fiind foarte facil, mai ales cu ajutorul interfeţelor grafice ale sistemelor Linux. Să realizăm un tabel în baza de date PCMagazine cu următorul script SQL

CREATE TABLE `useres` (
`id` INT( 10 ) NOT NULL ,
`nume` VARCHAR( 100 ) NOT NULL ,
`prenume` VARCHAR( 100 ) NOT NULL ,
`an` INT( 10 ) NOT NULL ,
`luna` INT( 10 ) NOT NULL ,
`zi` INT( 10 ) NOT NULL ,
`adresa` VARCHAR( 100 ) NOT NULL ,
`oras` VARCHAR( 100 ) NOT NULL ,
`telefon` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` ) 
);

Dacă ar fi să introducem printr-o comandă SQL în acest tabel o înregistrare, iată cum ar arăta aceasta:

INSERT INTO `useres` ( `nume` , 
`prenume` , `an` , `luna` ,
`zi` , `adresa` , `oras` ,
`telefon` , `email` ) VALUES (´Scarlatescu´, ´Mircea´,
´1980´, ´8´, ´16´,
´Adresa din Ploiesti´,
´Ploiesti´, ´0744 xxx xxx´,
´adresa@server.ro´ );

Să vedem acum cum procedăm pentru a introduce în baza de date o înregistrare din servletul pe care l-am realizat luna trecută. Primul pas este acela de a adăuga linia

import java.sql.*;

pentru a preciza că vom lucra şi cu clase JDBC.

Odată ce am realizat acest lucru, pentru a conecta aplicaţia noastră la serverul MySQL vom iniţializa driverul MyJDBC

Connection conn = 
DriverManager.getConnection
("jdbc:mysql://mysql.cs.nott.ac.uk/?user=
" + user + "&password=" + password );

Această linie declară că JDBC va lucra cu un server MySQL şi că toate operaţiile se vor realiza prin intermediul variabilei conn, care joacă rolul de legătură între aplicaţia noastră şi baza de date. Aici este locul unde trebuie să se schimbe declaraţia driverului în cazul în care am dori să portăm această aplicaţie pe un alt server de baze de date; user şi password sunt date ce permit accesul la baza de date, şi sunt stabilite de către administratorul serverului MySQL. La instalare, se stabilesc implicit userul root şi parola vidă.

Pentru a efectua o instrucţiune MySQL trebuie să instanţiem un obiect de tipul Statement:

Statement stmt = conn.createStatement ();

Prin intermediul acestui obiect realizăm orice instrucţiune SQL cu JDBC, iar în cazul nostru dorim să introducem o înregistrare, deci vom utiliza INSERT, aşa cum s-a precizat mai sus. Vom realiza o instrucţiune SQL mai întâi în cel mai simplu mod posibil

Iniţializăm un string care va stoca instrucţiunea noastră:

String query="INSERT INTO users (nume, prenume, an, luna, zi, adresa, oras, telefon, email) VALUES (´" + cerere.getParameter("nume") + "´, ´" + cerere.getParameter("prenume") + "´, " + cerere.getParameter("an") + ", " + cerere.getParameter("luna") + ", " + cerere.getParameter("zi") + ", ´" + cerere.getParameter("adresa") + "´, ´" + cerere.getParameter("oras") + "´, ´" + cerere.getParameter("telefon") + "´, ´" + cerere.getParameter("email") + "´,)";

Pentru a realiza efectiv introducerea în baza de date scriem următoarea instrucţiune

ResultSet rset = stmt.executeQuery (query);

Această modalitate este o primă (primitivă?) variantă de a realiza tema noastră de astăzi. Metoda executeQuery poate fi utilizată pentru execuţia oricărui tip de instrucţiune SQL, iar rest este un obiect care va conţine rezultatul interogării SQL. De fapt, executeQuery se utilizează doar pentru interogări de tip SELET, adică de aducere a datelor din baza de date.

JDBC pune la dispoziţie o metodă profesionistă de a lucra cu introducerea în bazele de date, prin intermediul instrucţiunii de actualizare a tabelelor, după cum urmează:

stmt.executeUpdate(query);

Prin intermediul acestei metode, după cum probabil intuiţi, se realizează ştergerea şi inserarea înregistrărilor într-o bază de date, precum şi modificarea unei înregistrări existente.

După efectuarea tuturor operaţiilor cu baza de date, pentru eliberarea resurselor se scriu urmatoărele două instrucţiuni.

stmt.close();
con.close();

Mai trebuie să facem o precizare foarte importantă. Exemplul prezentat mai sus are un ´bug´, pe care puţini programtori îl observă la început: lipsa unor tranzacţii SQL la lucrul cu baza de date. Pentru a explica mai bine despre ce este vorba, să considerăm un sistem bancar, în care o aplicaţie (web sau nu) accesează conturile unor persoane, adăugând sau extragând diferite sume din aceste conturi.

Implementat fără tranzacţii sql, acest sistem va ajunge mai devreme sau mai târziu la situaţii în care aduce conturi bancare la cote negative (nu v-ar place să aveţi în cont -200 USD, nu ? :) ) sau realizează operaţii matematice simple aparent gresite datorită accesului simultan la date.

Tranzacţiile stabilesc ordinea în care se efectuează operaţiile, şi de asemenea nu permit accesul simultan al mai multor clienti la aceleaşi date. Transacţiile sunt şi un mecansim de a integra mai multe instrucţiuni, care devin definitive doar dacă sunt toate corecte (adică nu întorc erori), în cazul în care la una din instrucţiuni se generează o eroare, toate instrucţiunile se anulează.

Pot fi stabilite chiar şi puncte de salvare pentru ca doar o parte din instrucţiuni să fie anulate la eroare, dar aici deja problema devine una a specialistilor ce lucreaza cu SQL si tranzacţii iar noi ne vom referi la ea în numărul viitor.

Sperăm că v-aţi făcut o idee despre ce înseamnă programarea JDBC, cu precizarea că vom reveni în episodul următor cu instrucţiuni din ce în ce mai complexe în ceea ce priveşte lucrul cu aceste clase.

Trebuie spus că orice programator Java care-şi doreşte o slujbă în domeniu trebuie să stăpânească foarte bine lucrul cu JDBC, având în vedere că atât aplicaţiile stand-alone, dar şi aplicaţiile Web sunt alimentate prin acest sistem.

De asemenea, importanţa Java pe piaţa platformelor de dezvoltare a făcut ca toate serverele importante de baze de date existente azi să aibă disponibile drivere JDBC, deci utilizarea acestui sistem pentru aplicaţiile client este recomandabilă.

Mult succes în programarea Java!

Referinţe web


PC Magazine Ro | CD ROM | Redactia | Abonamente | CautareArhive

Copyright © 1999-2002 Agora Media.

webmaster@pcmagazine.ro

LG - Life´s Good

www.agora.ro

deltafri

Concurs de Grafica Digitala si Web Design

www.agora.ro

www.agora.ro