Documente Academic
Documente Profesional
Documente Cultură
Tema:
crearea i utilizarea secvenelor ca elemente componente ale unei baze de date Oracle
crearea unor formulare utiliznd mediul de programare Netbeans pentru:
conectarea la o baz de date Oracle;
lucrul cu controale Windows din clasa JTable.
2. Creai un formular prin intermediul cruia s se realizeze conectarea la baza de date Oracle.
Acesta se va numi conectDialog i aspectul su ar putea fi cel din imaginea urmtoare:
.
Fixai titlul Conectare la baza de date pentru fereastra de dialog conectDialog.
Activarea formularului are loc la producerea evenimentului MenuSelected al meniului
Conectare, iar definiia metodei ConectareMenuSelected este urmtoarea:
conUtilizator=utilizator.getText().trim();
conParola=String.copyValueOf(parola.getPassword()).trim();
// Metoda getPassword() returneaza char[].
// Metoda String.copyValueOf() converteste char[]
// la String
flag=true;
if(conUtilizator.equals(""))
flag=false;
if(conParola.equals(""))
flag=false;
// utilizator necompletat
// parola necompletata
if(flag)
{
try {
OracleDataSource ods=new OracleDataSource();
String URL;
URL="jdbc:oracle:thin:";
URL+=conUtilizator+"/"+conParola;
URL+="@127.0.0.1:1521/XE";
//System.out.println("Fraza URL:
"+URL);
ods.setURL(URL);
cnx=ods.getConnection();
conMesaj.setForeground(Color.GREEN);
conMesaj.setText("Conectare OK");
conIncerc.setEnabled(false);
conRenunt.setEnabled(false);
}catch(SQLException sqlException){
conMesaj.setForeground(Color.RED);
conMesaj.setText("Conectare esuata. Verificati contul !!!");
conIncerc.setEnabled(false);
}
}
else
{
conMesaj.setForeground(Color.RED);
conMesaj.setText("Date incomplete !!!");
conIncerc.setEnabled(false);
}
Privii cu atenie secvena de cod de mai sus. Observi faptul c textele reprezentnd numele
utilizatorului i parola sunt pregtite pentru validare prin eliminarea spaiilor care preced i/sau
urmeaz textului propriu-zis. Sarcina este realizat de ctre metoda trim( ) a clasei String.
Preluarea textului editat n zona controlului parola aparinnd clasei JPasswordField se face cu
metoda getPassword( ). Aceasta returneaz un tablou de caractere (char [ ]) care apoi se
convertete la tipul String cu ajutorul metodei String.copyValueOf( ). Exist i o metod
getText( ) a clasei JPasswordField care returneaz textul n format String, dar aceasta este
considerat nvechit.
Datele privind user-ul i parola sunt considerate valide ntr-o prim etap dac acestea sunt
diferite de irul vid. n caz contrar, formularul afieaz avertismentul Date incomplete ca text
al etichetei conMesaj, dezactiveaza butonul Conectare i ateapt reeditarea datelor sau
renunarea la ncercarea de conectare. Validitatea propriu-zis a contului este confirmat prin
suprapunerea acestuia peste un cont de utilizator existent n baza de date. Dac aceast condiie
este ndeplinit, atunci se va afia un mesaj de confirmare ( "Conectare OK"), iar n caz contrar
mesajul va conine avertismentul "Conectare esuata. Verificati contul !!! " .
n toate cazurile n care butonul Conectare a fost dezactivat, reactivarea lui se va produce
atunci cnd se revine la editarea numelui utilizatorului sau a parolei, adic atunci cnd unul
dintre controalele utilizator sau parol primete focus-ul. Dovada acestor afirmaii o constituie
definiiile metodelor utilizatorFocusGained i parolaFocusGained redate n continuare.
private void utilizatorFocusGained(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
conMesaj.setText("");
conIncerc.setEnabled(true);
}
private void parolaFocusGained(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
conMesaj.setText("");
parola.setText("xxxxxxxxxxxx");
parola.doLayout();
parola.selectAll();
conIncerc.setEnabled(true);
Nu uitai s tergei sau s marcai ca un comentariu codul de conectare la baza de date existent
n definiia metodei constructor gestiune( ) a clasei aplicaiei:
.
3. mbuntii aspectul interfeei aplicaiei astfel nct la deschiderea ferestrei principale s fie activ
doar meniul care permite conectarea la baza de date Oracle. Toate celelalte meniuri vor fi vizibile,
dar inactive (a se vedea figura urmtoare).
Pentru a obine acest efect introducei urmtorul cod n metoda care descrie evenimentul
windowOpened asociat ferestrei principale a aplicaiei (click dreapta JFrame -> Events -> Window
windowOpened):
private void formWindowOpened(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
Tabele.setEnabled(false);
Interogari.setEnabled(false);
Rapoarte.setEnabled(false);
EmitereFacturi.setEnabled(false);
}
4. n situaia n care conectarea la baza de date s-a realizat se dorete dezactivarea meniului de
conectare i activarea celorlate meniuri ale barei de meniu. n cazul eecului va rmne activ, n
continuare, doar opiunea de conectare (pentru a permite o rencercare de conectare).
Modificrile care trebuie aduse aplicaiei se localizeaz n metoda conIncercActionPerformed( )
(metoda care descrie evenimentul produs la acionarea butonului cu textul Conectare din fereastra
conectDialog). Figura urmtoare pune n eviden completrile necesare n cod (liniile ncadrate).
5. Proiectai un formular care s v permit afiarea selectiv a facturilor emise clienilor. Aspectul
acestuia este cel din figura de mai jos.
Atribuii numele selFactDialog acestei ferestre.
Controalele Windows care populeaz suprafaa formularului sunt cele din fereastra Inspector
urmtoare:
Detaliile facturii selectate prin intermediul casetei combinate sunt extrase din tabelul fc_detaliu i
sunt afiate n formular de ctre controlul fcDetalii aparinnd clasei JTable.
De reinut ideea c la adugarea unui astfel de control mediul Netbeans l include ntr-un control din
clasa JScrollPane.
De asemenea trebuie precizat faptul c, controlul Jtable se asociaz cu un model de tabel. Modelul
de tabel este obiectul care conine descrierea i coninutul tabelului, acesta din urm servind doar
afirii modelului.
Un model de tabel este un obiect care poate aparine uneia din clasele DefaultTableModel sau
AbstractTableModel.
n continuare optm pentru prima variant. n acest caz, alegerea caracteristicilor modelului se face
prin intermediul proprietii model a obiectului fcDetalii:
Evenimentul produs la alegerea unui articol al casetei combinate este descris de ctre metoda
fcNrDataActionPerformed:
private void fcNrDataActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int indexCombo=fcNrData.getSelectedIndex();
try {
if(indexCombo>=0)
{
// sterg toate randurile din modelul tabelului, adica vechiul
// continut
DefaultTableModel dm=(DefaultTableModel)fcDetalii.getModel();
int nrLinii=dm.getRowCount();
for(int i=nrLinii-1;i>=0;i--)
{
dm.removeRow(i);
}
// pregatire continut nou al tabelului
rezultat.absolute(indexCombo + 1);
fcCodClient.setText(rezultat.getInt("cod_cli")+"");
fcCheltAcc.setText(rezultat.getFloat("ch_accesorii")+"");
fcValTot.setText(rezultat.getFloat("val_cu_tva")+"");
// pregatire tabel
int nrFact;
Date dataFact;
nrFact=rezultat.getInt("nr_fact");
dataFact=rezultat.getDate("data");
String frazaSQL="select * from fc_detaliu where nr_fact="+
nrFact +" "+"and data="+'\''+fmt.format(dataFact)+'\''+
" order by cod_marfa";
//System.out.println(frazaSQL);
comanda2=cnx.createStatement();
rezultat2=comanda2.executeQuery(frazaSQL);
Object[] dateRand=new Object[7];
while(rezultat2.next())
{
dateRand[0]=rezultat2.getString("cod_marfa");
dateRand[1]=rezultat2.getFloat("cant");
dateRand[2]=rezultat2.getFloat("pret_unitar");
dateRand[3]=rezultat2.getFloat("val_fara_tva");
dateRand[4]=rezultat2.getFloat("tva");
dateRand[5]=rezultat2.getFloat("val_cu_tva");
dateRand[6]=rezultat2.getString("um");
}
ex);
dm.addRow(dateRand);
}
}
catch (SQLException ex) {
Logger.getLogger(gestiune.class.getName()).log(Level.SEVERE,
}
null,
10