Sunteți pe pagina 1din 24

Dezvoltarea unei aplicaţii web cu ajutorul tehnologiei Java

Server Pages

În cele ce urmeaza voi prezenta modul de dezvoltare a unei aplicatii web cu ajutorul tehnologiei Java
Server Pages (JSP). Aplicaţia va fi construită în NetBeans, iar baza de date va fi dezvoltată în SGBD-ul MySql.

Diagrama logică a bazei de date “database” este următoarea (Figura 1):

Figura 1

Tabele sunt următoarele:


* continente(idContinent, Continent);
* tari(idTara, idContinent, Cod_Tara, Tara, Suprafata);
* orase(idOras, idTarat , Oras, Numar_locuitori);
Între tabelele continentete şi tari se realizează asocierea 1:N, iar intre tabelele tari si orase se realizeaza
asociera 1:M. Astfel, în această tabelă vom avea 2 chei străine(FK): idContinent şi idTara.

 Construirea bazei de date

Pentru a crea diagram “database” am folosit aplicataia MySQL Workbench. Am folosit tool-ul
specializat din aplicatie, pentru a crea fiecare tabela in parte. Tehnica folosita a fost Drag & Drop.
Dupa alegerea celor adaugarea celor trei tabele, le-am redenumit : “continente”, “tari”, “orase”.
Am introdus coloanele dorite pentru fiecare tabela, mai jos fiind disponibila forma finala a diagramei.
(Figura 2 )
Figura 2

Pentru fiecare dintre cele 3 tabele am setat un PRIMARY KEY cu AUTO_INCREMENT. Astfel tabela:
continentete are ca si PK “idContinent” , tabela tari are ca si PK “idTari”, tabela orase are ca si PK “idOras” .

Figura 3
Dupa stabilirea PK-urilor pentru cele 3 tabele am setata asocierile dintre acestea. Astfel pentru tabelele
continentete şi tari se realizează asocierea 1:N, iar intre tabelele tari si orase se realizeaza asociera 1:M.
In urma asocierilor facute cu ajutorul tool-ului folosind Drag& Drop sau implementat si FOREIGN_KEY
pentru tabela tari si orase. Dupa cum se poate vedea in imaginea precedent.
Dupa crearea diagramei am putut trece la pasul crearii bazei de date database.
Astfel am folosit comanda Forward Engineer to Database pentru a crea baza de date pe un server local.

Figura 4

Serverul a fost creat in aceeasi aplicatie folosind optiunea MySQLConection, configuratiile fiind disponibile
in imagine urmatoare.
Figura 5
Dupa crearea bazei de date pe serverul localhost am exportat aceasta baza intr-un script pentru a-l putea
folosi ca si fisier .sql in crearea aplicatiei JSP. (Figura 6)

Figura 6
Dupa obtinerea fisierului database.sql, se poate incepe constructia aplicatiei Web cu JSP.(Figura 7)

Figura 7
 Construirea aplicatiei JSP in NetBeans

Din meniul File se alege opţiunea New Project.


În fereastra apărută se alege opţiunea Web Application din cadrul categoriei de aplicaţii Java Web.
Am denumit proiectul Proiect_JSP. (Figura 8)

Figura 8

In primul rand, dupa constructia bazei de date trebuie sa creeam conexiunea in IDE NetBeans, pentru a
avea acces in interiorul mediului de dezvoltare ala baza de date create in MySQL Workbench. Astfel, alegem
optiunea Service -> Database->click dreapta -> New Conection. Din fereastra aparuta alegem opriunea
MySQL (conector/ J drive) . Figura 9
Figura 9

Dupa care alegem denumirea serverului, un username si o parola si apasam Finish.

Figura 10
Dupa acest pas vom putea vizualiza conexiunea in partea dreapta in dreptul pachetului Database.
In urma conexiunii la baza de date (apasand click dreapta-> Connect pe baza de date serverul tocmai
creadin ), merrgem la pasul urmator si anume creare tuturor fisierelor de tip .jsp si a clasei JavavBean , in
pachetul db . Urmand pasii tutorialului din Cursul 5,am trecut la editarea fiecarui fisier in parte.

In clasa JavaBean.java am scris metodele ce vor fi apelate de catrre fisierele jsp, metode de conectare,
deconectare la baza de date, metode de adaugare , vizualizare , modificare si stergere a datelor din tabele.
Acestea sunt operatii de tip CRUD, de lucru cu o baza de date.

public class JavaBean {

String error;
Connection con;

public JavaBean() {
}

public void connect() throws ClassNotFoundException, SQLException, Exception {


try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?useSSL=false", "root",
"1234"); //am setat conexiunea con sa primeasca conexiunea le baza de date creata
} catch (ClassNotFoundException cnfe) {
error = "ClassNotFoundException: Nu s-a gasit driverul bazei de date.";
throw new ClassNotFoundException(error);
} catch (SQLException cnfe) {
error = "SQLException: Nu se poate conecta la baza de date.";
throw new SQLException(error);
} catch (Exception e) {
error = "Exception: A aparut o exceptie neprevazuta in timp ce se stabilea legatura la baza de date.";
throw new Exception(error); // randurile de mai sus sunt erori care pot aparea daca conexiunea
//nu a fost realizata
}
} // metoda definite pentru conectare la baza de date database

public void disconnect() throws SQLException {


try {
if (con != null) {
con.close(); // inchidem conexiunea la baza de date
}
} catch (SQLException sqle) {
error = ("SQLException: Nu se poate inchide conexiunea la baza de date.");
throw new SQLException(error);//randurile de mai sus sunt erori care pot aparea daca deconectarea
// de la baza de date nu a fost realizata
}
} // metoda definita pentru deconectarea de la database

Am implementat 3 metode pentru adaugarea de date in cele trei tabele: adaugaContinent, adaugaTara,
adaugaOras

public void adaugaContinent(String Continent)


throws SQLException, Exception {
if (con != null) { // verificam daca exista conesiune
try {
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate("insert into continente(Continent) values('" + Continent + "' );");
// adaugam in tabela continente un nou element Continent

} catch (SQLException sqle) {


error = "ExceptieSQL: Reactualizare nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error); // erorii aparute in urma nerealizarii adaugarii elementelor dorite
}
} // end of adaugaContinent()

public void adaugaTara(int idContinent,String Cod_Tara, String Tara, String Suprafata)


throws SQLException, Exception {
if (con != null) {
try {
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate("insert into tari(idContinent, Cod_Tara, Tara, Suprafata ) values('" +
idContinent + "' ,'" + Cod_Tara + "' , '" + Tara + "', '" + Suprafata + "');");
// adaugarea in tabela tari a ele mentelor dorite: Cod Tara , Tara , Suprafata, si FK idContinent
} catch (SQLException sqle) {
error = "ExceptieSQL: Reactualizare nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error); // erorii aparute in urma nerealizarii adaugarii elementelor dorite
}
} // end of adaugaTara()

public void adaugaOras( int idTara, String Oras, String Numar_locuitori)


throws SQLException, Exception {
if (con != null) {
try {
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate("insert into orase(idTara, Oras, Numar_locuitori) values('" + idTara + "' , '" +
Oras + "', '" + Numar_locuitori + "');");
// adaugam elementele dorite in tabela orase: Oras , Numar_locuitori, si FK idTara
// se poate modifica valoarea datei astfel incat sa se ia data curenta a sistemului

} catch (SQLException sqle) {


error = "ExceptieSQL: Reactualizare nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error); // erorii aparute in urma nerealizarii adaugarii elementelor dorite
}
} // end of adaugaOras()

// Am implementat 3 metode pentru a vizulaiza datele corespondente fiecarei coloane ale celor trei
//tabele: vedeTabela, vedeTara, vedeOras.

public ResultSet vedeTabela(String tabel) throws SQLException, Exception {


ResultSet rs = null;
try {
String queryString = ("select * from `database`.`" + tabel + "`;");
Statement stmt = con.createStatement(/*ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR
_READ_ONLY*/); // interogam baza de date cerand vizulizarea variabilei tabel, putem doar vizualiza
rs = stmt.executeQuery(queryString);
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error); // erori aparute in urma interogarii dorite
}
return rs;
} // vedeTabela()

public ResultSet vedeTara() throws SQLException, Exception {


ResultSet rs = null;
try {
String queryString = ("SELECT a.Continent, b.idTara, b.idContinent idContinent_tara, b.Cod_Tara,
b.Tara, b.Suprafata FROM `database`.continente a, `database`.tari b where a.idContinent =
b.idContinent;"); // cerem vizualizarea anumitor elemente din database, pe care dorim sa le aibe tabela
//finala, cea pe care o vizulizam in pagina jsp
Statement stmt = con.createStatement(/*ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY*/);
rs = stmt.executeQuery(queryString);
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error); // erori aparute in urma interogarii dorite
}
}
return rs;
} // vedeTara()

public ResultSet vedeOras() throws SQLException, Exception {


ResultSet rs = null;
try {
String queryString = ("SELECT a.Cod_Tara, a.Tara, a.Suprafata , b.idOras, b.idTara idTara_oras,
b.Oras, b.Numar_locuitori FROM `database`.tari a, `database`.orase b where a.idTara = b.idTara;");
// cerem vizualizarea anumitor elemente din database, pe care dorim sa le aibe tabela
//finala, cea pe care o vizulizam in pagina jsp

Statement stmt = con.createStatement(/*ResultSet.TYPE_SCROLL_INSENSITIVE,


ResultSet.CONCUR_READ_ONLY*/);
rs = stmt.executeQuery(queryString);
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error); // erori aparute in urma interogarii dorite
}
return rs;
} // vedeOras()

Am implementat o metoda pentru stergerea tabelei dorita: stergeTabela

public void stergeTabela(String tabela) throws SQLException, Exception {


if (con != null) {
try {
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate("delete from " + tabela + ";"); // comanda de stergere a tabelei
} catch (SQLException sqle) {
error = "ExceptieSQL: Stergere nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error); // erori aparute in urma nerealizarii operatiei delete
}
} // end of stergeTabela()

//Am implimentat o metoda specifica pentru modificarea datelor dorite din tabel, aceasta modificare se va
//face pe linia selectata cu ajutorul unui marker in jsp

public void modificaTabela(String tabela, String IDTabela, int ID, String[] campuri, String[] valori) throws
SQLException, Exception {
String update = "update " + tabela + " set ";
String temp = ""; // cream variabila update de tip string ce preaia tabela pe care dorim sa o modificam
if (con != null) {
try {
for (int i = 0; i < campuri.length; i++) {
if (i != (campuri.length - 1)) {
temp = temp + campuri[i] + "='" + valori[i] + "', ";
} else {
temp = temp + campuri[i] + "='" + valori[i] + "' where " + IDTabela + " = '" + ID + "';";
} // realizarea modificarii tabelei prin suprascrierea vechilor date
}
update = update + temp;
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate(update);
} catch (SQLException sqle) {
error = "ExceptieSQL: Reactualizare nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error);
} // erori aparute on urma nerealizarii modificarilor
} // end of modificaTabela()

// O alta metoda utila pentru determinarea Id liniei pe care dorim sa o modificam. Acesta metoda am
//particularizat-o pentru fiecare dintre cele trei tabele : intoarceLinieDupaId (aceasta este pentru tabela
//“continente”), intoarceTaraId, intoarceOrasId

public ResultSet intoarceLinieDupaId(String tabela, String denumireId, int ID) throws SQLException,
Exception {
ResultSet rs = null;
try {
// Execute query
String queryString = ("SELECT * FROM " + tabela + " where " + denumireId + "=" + ID + ";");
// preluam Id liniei dorite din tabela interogata prin variabila “tabela”
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(queryString); //sql exception
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error);
} // erori posibile in urma nerealizarii metodei
return rs;
} // end of intoarceLinieDupaId()

public ResultSet intoarceTaraId(int ID) throws SQLException, Exception {


ResultSet rs = null;
try {
// Execute query
String queryString = ("SELECT a.Continent, b.idTara, b.idContinent idContinent_tara, b.Cod_Tara,
b.Tara, b.Suprafata FROM `database`.continente a, `database`.tari b where a.idContinent = b.idContinent
and idTara = '" + ID + "';"); // determinam id corespunzator liniei care are datele corespunzatoare
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(queryString); //sql exception
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error);
} // erori posibile in urma nerealizarii metodei
return rs;
} // end of intoarceLinieDupaId()

public ResultSet intoarceOrasId(int ID) throws SQLException, Exception {


ResultSet rs = null;
try {
// Execute query
String queryString = (" SELECT a.Cod_Tara, a.Tara, a.Suprafata , b.idOras, b.idTara idTara_oras,
b.Oras, b.Numar_locuitori FROM `database`.tari a, `database`.orase b where a.idTara = b.idTara and idOras
= '" + ID + "';"); // determinam id corespunzator liniei care are datele corespunzatoare
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(queryString); //sql exception
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error); // erori posibile in urma nerealizarii metodei
}
return rs;
} // end of intoarceLinieDupaId()
}
Dupa implementarea metodelor necesare in crearea aplicatiei vom trece la screierea fisierelor .jsp din l
branche-ul Web Pages.

Incepem prin configurarea paginii index.html, fiind pagina pringipala a aplicatiei noastre.

<body>
<hr>
<hr>
<br/>
<h2 align="center"> Bun venit! Alege una dintre tabelele de mai jos! </h2>
<p align="center"> <a href="tabela_Continent.jsp"><b><strong>Continente</strong></b></a></p>
<p align="center"> <a href="tabela_Tara.jsp"><b><strong>Tari</strong></b></a></p>
<p align="center"> <a href="tabela_Oras.jsp"><b><strong>Orase</strong></b></a></p>
<br/>
<hr> // implementarea link-urilor catre tabela_Continent.jsp, tabela_Tara.jsp, tabela_Oras.jsp, pentru
adaugarea de date
<ul >
<li ><a href="modifica_Continent.jsp"><b><strong>Modifica Continent</strong></b></a></li>
</ul>
<ul >
<li><a href="modifica_Tara.jsp"><b><strong>Modifica Tara</strong></b></a></li>
</ul>
<ul >
<li><a href="modifica_Oras.jsp"><b><strong>Modifica Oras</strong></b></a></li>
</ul>
<hr> // implementarea link-urilor catre modifica_Continent.jsp, modifica_Tara.jsp, modifica_Oras.jsp,
pentru modificarea datelor din tabele
<hr>
<br/>
</body>

(Toate paginile urmatoare modifica au extensia .jsp)

Incepem cu modificare fisierlor tabela_Continent, tabela_Tara, tabela_Oras.


Mai jos avem codul sursa pentru tabela_Continent si tabela_Tara

tabela_Continent

<body>
<h1 align="center"> Tabelă Continente:</h1>
<br/>
<p align="center"><a href="nou_Continent.jsp"><b>Adaugă un nou continent.</b></a> </p>
<form action="sterge_Continent.jsp" method="post"> // permite link catre pagina sterge_Contient
// activate ptin butonul Sterge
<table border="2" align="center">
<tr>
<td><b>Mark:</b></td>
<td><b>IdContinent:</b></td>
<td><b>Continent:</b></td>
//Setam coloanele pe care dorim sa le aibe tabela Continent
</tr>
<%
jb.connect();
ResultSet rs = jb.vedeTabela("continente");
int x;
while (rs.next()) {
x = rs.getInt("idContinent"); // preluam PK din tabela continente
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td><td><%= x%></td>
<td><%= rs.getString("Continent")%></td> // campuri specifice pentru scrierea datelor
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Șterge liniile marcate"> // butonul care activeaza sterge_Continent
</p>
</form>
<%
rs.close(); // inchiderea conexiunii
jb.disconnect();
%>
<br/>
<p align="center">
<br/>
<a href="modifica_Continent.jsp"><b>Modifică continente</b></a>
// lnk catre pagina de modificari
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
tabela_Tara

<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a> </p>
<form action="sterge_Tara.jsp" method="post"> // link catre pagina de stergere activat prin buton
<table border="1" align="center">
<tr>
<td><b>Mark:</b></td>
<td><b>IdȚară:</b></td>
<td><b>IdContinent:</b></td>
<td><b>CodȚară:</b></td>
<td><b>Țară:</b></td>
<td><b>Continent:</b></td>
<td><b>Suprafață (în km<sup>2</sup>):</b></td>
//Am ales coloanele care vor forma coponenta tabelei pe care dorim sa o vizualizam
</tr>
<%
jb.connect();
ResultSet rs = jb.vedeTara();
int x;
while (rs.next()) {
x = rs.getInt("idTara");
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td>
<td><%= x%></td>
<td><%= rs.getInt("idContinent_tara")%></td> // salvarea FK in database in tabela tari
<td><%= rs.getString("Cod_Tara")%></td>
<td><%= rs.getString("Tara")%></td>
<td><%= rs.getString("Continent")%></td>
<td><%= rs.getFloat("Suprafata")%></td>
//campuri pentru srierea datelor, corespunzatoare coloanelor alese mai sus
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Șterge liniile marcate"> // buton care actioneaza stergerea
</p>
</form>
<%
rs.close();
jb.disconnect();
%>
<br/>
<p align="center">

<br/>
<a href="modifica_Tara.jsp"><b>Modifică țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>

Incepem cu modificare fisierlor sterge_Continent, sterge_Tara, sterge_Oras.


Mai jos avem codul sursa pentru sterge_Continent , implementarea este asemanatoare si pentru
celelalte tabele.

sterge_Continent
<body>
<%
String[] s = request.getParameterValues("primarykey");
jb.connect();
jb.stergeDateTabela(s, "continente", "idContinent");
jb.disconnect();
%>
// Stergerea se face in urma apelarii metodei stergeDateTabel, optinant mai intai PK (s)
<p align="center">
<br/>
<a href="tabela_Continent.jsp"><b>Mergi la tabela Continente</b></a>
// buton de acitune catre vizualizarea tabeleii
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
Incepem cu modificare fisierlor nou_Continent, nou_Tara, nou_Oras.
Mai jos avem codul sursa pentru nou_Oras
Adaugarea unui nou oras in functie de o tara adaugata in tabela tara, folosind astfelt asocierea 1:M (tari :
orase)

<body>
<%
int idtara;
String id, CodTara, Tara, Suprafata, Oras, Numar_loc;

id = request.getParameter("idTara");
Oras = request.getParameter("Oras");
Numar_loc = request.getParameter("Numar_locuitori");

if (id != null) {
jb.connect();
jb.adaugaOras(java.lang.Integer.parseInt(id), Oras, Numar_loc);
jb.disconnect();
%> // Setam variabile specific pentru fiecare din datele introduce

<p>Datele au fost adăugate.</p><%


} else {
jb.connect();
ResultSet rs1 = jb.vedeTara(); //preluam FK pentru al utiliza in implementarea meniului de mai jos
%>
<h1> Adaugă un Oraș!</h1>
<form action="nou_Oras.jsp" method="post">
<table>

<tr>
<td align="right">Selectați țara:</td>
<td>
<SELECT NAME="idTara">
<%
while(rs1.next()){
idtara = rs1.getInt("idTara");
CodTara = rs1.getString("Cod_Tara");
Tara = rs1.getString("Tara");

%>
<OPTION VALUE="<%= idtara%>"><%= idtara%>,<%= CodTara%>,<%=
Tara%></OPTION>
<%
}
%>
</SELECT>
</td>
</tr>
// mai sus este implementat un meniu de selectie, astfel be baza FK din tabela
// orase : idTara, avem acces la datele din tabela tari , pe care le vom aduga si in
//tabela curenta

<tr>
<td align="right">Oraș:</td>
<td> <input type="text" name="Oras" size="30" /></td>
</tr>
<tr>
<td align="right">Număr de locuitori:</td>
<td> <input type="text" name="Numar_locuitori" size="30" /></td>
</tr>

</table>
<input type="submit" value="Adaugă oraș" />
</form>
<% // Adaugam date in fiecare coloanal din tabela Orase, si-anume: Oras si Numar_locuitori
}
%>
<br/>
<a href="nou_Oras.jsp"><b>Adaugă mai multe orașe</b></a> // link catre nou_Oras
<br/>
<br/>
<a href="tabela_Oras.jsp"><b>Mergi la tabela Orașe</b></a> // link catre tabela_Oras
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a> // link catre pagina principala
<br/>
</body>

Incepem cu modificare fisierlor modifica_Continent, modifica_Tara, modifica_Oras.


Mai jos avem codul sursa pentru modifica_Tara

<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a></p>

<form action="m1_Tara.jsp" method="post"> //pagina modifica_Tara are legatura catree m1_Tara


<table border="1" align="center">
<tr>
<td><b>Mark:</b></td>
<td><b>IdȚară:</b></td>
<td><b>CodȚară:</b></td>
<td><b>Țară:</b></td>
<td><b>IdContinent:</b></td>
<td><b>Continent:</b></td>
<td><b>Suprafață (în km<sup>2</sup>):</b></td>
</tr> //Am ales coloanele care vor fi modificate in tabela tari

<%
jb.connect();
ResultSet rs = jb.vedeTara();
int x;
while (rs.next()) {
x = rs.getInt("idTara"); // obtinerea PK pentru modificarea tabelei in urmatorea sintaxa
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td>
<td><%= x%></td>
<td><%= rs.getString("Cod_Tara")%></td>
<td><%= rs.getString("Tara")%></td>
<td><%= rs.getInt("idContinent_tara")%></td> //FK care leaga tabela continente de tabela tari
<td><%= rs.getString("Continent")%></td>
<td><%= rs.getFloat("Suprafata")%></td>
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Modifică linia"> // butonul care determina modificarea si
//incarcarea datelor in baza de date in tabela tari
</p>
</form>
<%
jb.disconnect();%>
<br/>
<p align="center">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
Incepem cu modificare fisierlor m1_Continent, m1_Tara, m1_Oras.
Mai jos avem codul sursa pentru m1_Tara

<%
jb.connect();
String Continent, CodTara, Tara, Suprafata;

int aux = java.lang.Integer.parseInt(request.getParameter("primarykey"));


ResultSet rs = jb.intoarceTaraId(aux); // determinarea id-ului liniei pe care vrem sa o modificam
rs.first();
int id1 = rs.getInt("idContinent_tara");

Continent = rs.getString("Continent");
CodTara = rs.getString("Cod_Tara");
Tara = rs.getString("Tara");
Suprafata = rs.getString("Suprafata");

ResultSet rs1 = jb.vedeTabela("continente");


int idcontinent ;
// obtinerea noilor valori pentru modificarile dorite

%>
<form action="m2_Tara.jsp" method="post"> // urmatoarea pagina accesata este m2_Tara
<table align="center">
<tr>
<td align="right">IdTara:</td>
<td> <input type="text" name="idTara" size="30" value="<%= aux%>" readonly/></td>
</tr>
<tr>
<td align="right">IdContinent:</td> // preluam FK pe baza caruia avem acces la datele dein
//tabela continente ce vor fi adaugate in tabela tari prin meniul de mai jos
<td>
<SELECT NAME="idContinent">
<%
while (rs1.next()) {
idcontinent = rs1.getInt("idContinent");
Continent = rs1.getString("Continent");

if (idcontinent != id1) {
%>
<OPTION VALUE="<%= idcontinent%>"><%= idcontinent%>, <%= Continent%></OPTION>
<%
} else {
%>
<OPTION selected="yes" VALUE="<%= idcontinent%>"><%= idcontinent%>, <%=
Continent%></OPTION>
<%
}
}
%>
</SELECT>

</td>
</tr>
// modificam datele din fiecare coloanal a tabelei
<tr>
<td align="right">Cod Țară:</td>
<td> <input type="text" name="Cod_Tara" size="30" value="<%= CodTara%>"/></td>
</tr>
<tr>
<td align="right">Țară:</td>
<td> <input type="text" name="Tara" size="30" value="<%= Tara%>"/></td>
</tr>
<tr>
<td align="right">Suprafață (în km<sup>2</sup>):</td>
<td> <input type="text" name="Suprafata" size="30" value="<%= Suprafata%>"/></td>
</tr>
</table><p align="center">
<input type="submit" value="Modifică linia">
</p>
</form>
<p align="center"">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</body>
<%
rs.close();
rs1.close();
jb.disconnect();
%>
Incepem cu modificare fisierlor m2_Continent, m2_Tara, m2_Oras.
Mai jos avem codul sursa pentru m2_Tara

<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a></p>
<%
jb.connect();
int aux = java.lang.Integer.parseInt(request.getParameter("idTara"));
String idContinent = request.getParameter("idContinent");
String Tara = request.getParameter("Tara");
String CodTara = request.getParameter("Cod_Tara");
String Suprafata = request.getParameter("Suprafata");
// crearea de variabile pentru datele noi introduse
String[] valori = {idContinent, CodTara, Tara, Suprafata};
String[] campuri = {"idContinent", "Cod_Tara", "Tara", "Suprafata"};
jb.modificaTabela("tari", "idTara", aux, campuri, valori); // se apeleaza metoda modificaTabela
//pentru a aduga datele noi introduse de user
jb.disconnect();
%>
<h1 align="center">Modificările au fost efectuate !</h1>
<p align="center">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</body>
</html>

In urma scrierii fiecarui paginii, aplicatia este acum create si functionala.


Pentru a rula aplicaţia pe serverul web veţi da click dreapta în cadrul proiectului pe
fişierul index.html şi veţi alege opţiunea Run File (SHIFT + F6).

Bibliografie:

- Materialele din cursul de PAI, aplicatile create si puse la dispozitie in : Curs_5, Curs_6

S-ar putea să vă placă și