Documente Academic
Documente Profesional
Documente Cultură
Tema:
1. Modificai structura tabelului clienti existent n schema gestiune a bazei de date Oracle astfel
nct s nlocuii coloana adresa cu alte coloane care s conin date elementare cum ar fi:
judet, localitate, strada, numar, bloc, scara, apartament, cod postal.
n plus, adugai o coloan care s memoreze felul clientului i care s aib valoarea PJ n cazul
unui client persoan juridic i respectiv PF, n cazul unui client persoan fizic.
Noile cmpuri vor avea urmtoarele caracteristici:
Numele cmpului
Tipul i dimensiunea
Semnificaia
cod_jud
NUMBER(2,0)
codul judeului
cod_loc
NUMBER(3,0)
codul localitii
strada
VARCHAR2(30)
numele strzii
numar
VARCHAR2(6)
bloc
VARCHAR2(6)
indicativul blocului
scara
VARCHAR2(6)
numr scar
apart
NUMBER(3,0)
numr apartament
cod_post
NUMBER(6,0)
codul potal
tip_cli
VARCHAR2(2)
felul clientului
localitati
cod
NUMBER (2,0)
cod_jud
NUMBER (2,0)
denum
VARCHAR2(30)
cod_loc
denum
NUMBER (3,0)
VARCHAR2(40)
Adugai constrngeri de tipul foreign key pentru a crea legturi ntre tabelele judete i localitati, pe
de o parte i ntre tabelul clienti i tabelele judete i localitati, pe de alt parte.
3. Adugai nregistrri n tabelele judete i localitati. Completai informaiile referitoare la adres
n tabelul clienti.
1
4. Proiectai un formular care s permit adugarea unor noi nregistrri n tabelul clienti. Acesta va
avea titlul Actualizare clienti i se va activa la opiunea Tabele -> Actualizare > Clienti aleas din meniul aplicaiei Gestiune stocuri.
Coninutul formularului este cel din imaginea urmtoare:
grup de
butoane radio
controale
Combo Box
control Text
Area
.
Valoarea expresiei seqCli.nextval reprezint urmtoarea valoare a secvenei seqCli. Aceast
expresie se va folosi n comanda SQL INSERT, rulat din aplicaia Java, ca valoare a coloanei cod
din structura tabelului clienti.
Noul formular va fi gzduit de ctre fereastra de dialog actClientiDialog, iar tipul i numele
controalelor Windows adugate sunt cele din fereastra Inspector:
Formularul conine dou controale de tipul
JComboBox numite cliJudet i respectiv,
cliLocalitate. Popularea acestor controale pentru
n
metoda
afiarea
iniial
se
face
actClientiActionPerformed asociat barei de meniu
Tabele -> Actualizare -> Clienti .
Prima caset combinat se creeaz prin adugarea
tuturor numelor de judee coninute n tabelul judete,
n ordine alfabetic. Pentru aceasta e necesar un
obiect din clasa Statement numit comanda i unul
din clasa ResultSet numit rsJudete.
Important :
Caseta combinat cliJudet nu se mai modific dup
acest moment. A doua caset combinat,
rsLocalitati, se construiete la nceput, odat cu
caseta rsJudete i se va reface ori de cte ori se va
selecta un jude din caseta rsJudete astfel nct lista
localitilor s conin doar numele localitilor
aparintoare judeului selectat din prima list.
Deoarece n noua nregistrare care va fi adugat
tabelului clienti se vor memora codul judeului i
codul localitii i nu denumirile acestora, aceste
dou valori se pstreaz n variabilele judetSel i
respectiv, localSel.
De asemenea, pentru adugarea unei nregistrri noi
n tabelul clienti e necesar un obiect din clasa
ResultSet numit aici rsClienti i unul de tip
Statement numit comanda4.
4
Statement comanda,comanda2,comanda3,comanda4;
ResultSet rezultat;
ResultSet rsJudete,rsLocalitati;
ResultSet rsClienti;
int judetSel;
int localSel;
}
catch(SQLException ex)
{
System.out.println("eroare SQL");
System.exit(1);
}
n continuare sunt necesare cteva precizri suplimentare pentru o bun proiectare a formularului i
anume:
i. din mulimea cmpurilor de text (controale din clasele JTextField i JTextArea), doar
completarea numelui clientului este obligatorie (controlul cliNume);
ii. valorile editate n controalele cliApart (apartamentul) i cliCodPostal (codul potal)
trebuie s fie valori numerice ntregi, n cazul n care aceste controale conin text; n
caz contrar, cmpurile corespunztoare (apart i respectiv, cod_post) din tabelul clieni
vor primi valoarea null. Verificarea validitii acestor valori se face cu metoda
Integer.parseInt( ) care analizeaz textul afiat de control i, n situaia n care acesta
nu corespunde , va genera o excepie de tipul NumberFormatException. La captarea
unei astfel de excepii (blocuri try-catch) o variabil boolean numit flag i va
schimba valoarea n false.
iii. aceeai variabila flag i va schimba valoarea la false atunci cnd numele clientului
este necompletat.
Verificarea acestor condiii se face la acionarea butonului Adaugare prin apelul metodei
clientValid. Definiia acestei funcii poate fi urmtoarea:
private boolean clientValid(String numeCli, String apartCli, String codPostCli)
{
// conditiile de validare sint:
//
numeCli nevid
//
apartCli vid sau numar
//
codPostCli vid sau numar
boolean flag=true; // date valide
if(numeCli.trim().equals(""))
flag=false;
if(!(apartCli.trim().equals("")))
// apartCli nevid
try
{
Integer.parseInt(apartCli);
}
catch(NumberFormatException ex)
{
flag=false;
}
if(!(codPostCli.trim().equals("")))
// codPostCli nevid
try
{
Integer.parseInt(codPostCli);
}
catch(NumberFormatException ex)
{
flag=false;
}
}
return flag;
Codul care descrie evenimentul actionPerformed (adic click) al butonului Adaugare (controlul
adaugcli) poate fi:
private void adaugcliActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// declarare variabile locale care preiau valorile din controalele
// formularului
String
String
String
String
String
String
felCli;
numeCli;
stradaCli;
numarCli;
blocCli;
scaraCli;
String
String
String
String
apartCli;
codPostCli;
telCli;
emailCli;
if(pj.isSelected())
felCli="PJ";
else
felCli="PF";
numeCli=cliNume.getText();
stradaCli=cliStrada.getText();
numarCli=cliNumar.getText();
blocCli=cliBloc.getText();
scaraCli=cliScara.getText();
apartCli=cliApart.getText();
codPostCli=cliCodPost.getText();
telCli=cliTel.getText();
emailCli=cliEmail.getText();
// verificarea validitatii datelor i adaugarea sau respingerea clientului
if(clientValid(numeCli, apartCli, codPostCli))
{
// se adauga clientul
String frazaSQL;
frazaSQL="INSERT INTO clienti VALUES(";
frazaSQL+="seqCli.nextval"+",";
frazaSQL+=apostrofeaza(numeCli.trim())+",";
frazaSQL+=apostrofeaza(telCli.trim())+",";
frazaSQL+=apostrofeaza(emailCli.trim())+",";
frazaSQL+=judetSel+",";
frazaSQL+=localSel+",";
frazaSQL+=apostrofeaza(stradaCli.trim())+",";
frazaSQL+=apostrofeaza(numarCli.trim())+",";
frazaSQL+=apostrofeaza(blocCli.trim())+",";
frazaSQL+=apostrofeaza(scaraCli.trim())+",";
frazaSQL+=((apartCli.trim().equals(""))?"null":apartCli.trim())+",";
frazaSQL+=((codPostCli.trim().equals(""))?"null":codPostCli.trim())+",";
frazaSQL+=apostrofeaza(felCli)+")";
//System.out.println("frazaSQL:"+frazaSQL);
try {
comanda4.executeUpdate(frazaSQL);
InitializareControale();
} catch (SQLException ex) {
System.out.println("eroare SQL la adaugare inregistrare");
System.exit(1);
}
}
else
{
// clientul se respinge
messageBoxDialog.setVisible(true);
mesaj.setText("Nume client necompletat/"+
"Apartament eronat/"+
"Cod postal eronat !!!");
messageBoxDialog.setVisible(true);
messageBoxDialog.pack();
}
Observai c definiia acestei funcii conine apelul funciei de validare (funcia clientValid). n
cazul n care aceasta din urm returneaza true, se va aduga n tabelul clienti o noua nregistrare
care va prelua n coloanele sale valori editate sau alese din formular. O singur excepie exist i
aceasta const n completarea coloanei cod nu cu o valoare pregtit n formular, ci cu valoarea
urmtoare a secvenei seqCli, adic valoarea seqCli.nextval.
7
Dup adugarea nregistrrii se reseteaz controalele formularului prin apelul unei noi funcii
numite InitializareControale a crei definiie poate fi urmtoarea:
private void InitializareControale()
{
pj.setSelected(true);
cliNume.setText("");
cliJudet.setSelectedIndex(0);
cliStrada.setText("");
cliNumar.setText("");
cliBloc.setText("");
cliScara.setText("");
cliApart.setText("");
cliCodPost.setText("");
cliTel.setText("");
cliEmail.setText("");
}
Definiia metodei apostrofeaza apelat la adugarea unui client nou este urmtoarea:
private String apostrofeaza(String text)
{
}
return "\'"+text+"\'";
Am vzut care trebuie s fie comportamentul formularului n situaia n care datele sunt corecte din
punct de vedere al criteriilor de validare.
Ce se ntmpl ns dac datele sunt eronate ?
Rspunsul este urmtorul: este afiat un mesaj de eroare explicit n fereastra de dialog
messageBoxDialog,
iar apoi, la acionarea butonului OK, se revine n formular cu pstrarea valorilor n vederea
corectrii lor.
5. Exist situaii n care, dup completarea datelor n formular, se dorete abandonarea operaiei de
adugare. Acest rol este ndeplinit de metoda actionPerform a butonului Renuntare (controlul
renunctcli) care, prin apelul metodei InitializareControale ( ) reseteaz controalele formularului,
fr a prelua valorile precedente ale acestora.
Definiia metodei renuntcliactionPerform este urmtoarea:
private void renuntcliActionPerformed(java.awt.event.ActionEvent evt) {
InitializareControale();
}
6. ncheierea lucrului cu acest formular se face prin acionarea butonului Iesire (adic controlul
iesirecli), iar codul asociat este:
private void iesirecliActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
// TODO add your handling code here:
actClientiDialog.setVisible(false);
comanda.close();
comanda2.close();
comanda3.close();
comanda4.close();
7. Cretei funcionalitatea formularului prin adugarea unui buton de cutare a unui client i a unui
buton de actualizare.
10