TehnJava_lab20

download TehnJava_lab20

of 12

Transcript of TehnJava_lab20

  • 8/13/2019 TehnJava_lab20

    1/12

    TEHNOLOGII JAVA

    PENTRU DEZVOLTAREA APLICAIILORLUCRARE DE LABORATOR 20

    JDBC Accesul la baze de date

    I. SCOPUL LUCRRIILucrarea de fa are rolul de a prezenta i familiariza studentul cu modul de accesare si

    interogare a bazelor de date, lucrnd n cadrul aplicaiilor Java.La sfritul acestei lucrri, studentul va avea posibilitatea sscrie programe Java n care s

    utilizeze noiunile nvate.

    II. NOIUNI TEORETICEExemple

    1. Se va utiliza aceeai baz de date StudentiDB creat n cadrul laboratorului 19. ncontinuare vom prezenta un program Java (incomplet) care implementeazo interfagraficprincare utilizatorul poate sformuleze fraze SQL i sprimeascraspunsul.

    i mpor t j ava. awt . *;i mpor t j ava. awt . event . *;

    publ i c cl ass DBQuer yGUI extends Fr ame i mpl ement sWi ndowLi st ener , Act i onLi st ener {

    Text Fi el d sql Exec;But t on execut eBut t on;Label l abel 1;st at i c Text Ar ea edi t 1;Label l abel 2;But t on qui t But t on;But t on r esetBut t on;Si mpl eSel ect ob;

    publ i c voi d i ni t ( ) {t hi s. addWi ndowLi st ener ( t hi s) ;LayoutManager l ayout man = new Border Layout ( ) ;t hi s. set Layout ( l ayout man) ;Panel p1 = new Panel ( ) ;Panel p2 = new Panel ( ) ;Panel p3 = new Panel ( ) ;sql Exec = new Text Fi el d( 50) ;

    1

  • 8/13/2019 TehnJava_lab20

    2/12

    edi t 1 = new Text Ar ea(12, 80) ;l abel 1 = new Label ( "Ent er an SQL st atement : " ) ;l abel 2 = new Label ( "Out put " ) ;execut eBut t on = new But t on( "Execut e") ;qui t But t on = new But t on( "Qui t " ) ;r eset But t on = new But t on( "Reset " ) ;

    p1. add( l abel 1) ;p1. add( sql Exec) ;p2. add( execut eBut t on) ;p2. add( r eset But t on) ;p2. add( qui t But t on) ;p3. add( l abel 2) ;p3. add( edi t 1) ;t hi s. add( "Nor t h", p1) ;t hi s. add( "Cent er ", p3) ;t hi s. add( "Sout h", p2) ;execut eBut t on. addAct i onLi st ener ( t hi s) ;qui t But t on. addActi onLi st ener ( t hi s) ;

    r eset But t on. addActi onLi st ener ( t hi s) ;}

    publ i c voi d act i onPer f or med( Act i onEvent e) {St r i ng command = e. get Act i onCommand( ) ;i f ( command. equal s( "Execut e" ) )

    cl i ckedExecut eBut t on( ) ;i f ( command. equal s( "Qui t ") )

    cl i ckedQui t But t on( ) ;i f ( command. equal s( "Reset " ) )

    sql Exec. set Text ( "" ) ;}publ i c voi d cl i ckedExecut eBut t on( ) {

    edi t 1. set Text ( "") ;edi t 1. r epai nt ( ) ;i f ( ob == nul l ) {

    try {ob = new SimpleSelect( ) ;

    } cat ch (Cl assNotFoundExcept i on cnf e) {cnf e. pr i nt St ackTr ace( ) ;r et ur n;

    }}i f ( ! ob. open( ) ) {

    edi t 1. setText ( "Nu se poat e st abi l i o conexi une cu baza de

    dat e ! ") ;r et ur n;

    }St r i ng sql St r i ng, resul t ;sql St r i ng = sql Exec. get Text ( ) ;result = ob.queryDatabase(sqlString);

    i f ( r esul t != nul l )edi t 1. set Text ( resul t ) ;

    2

  • 8/13/2019 TehnJava_lab20

    3/12

    el seedi t 1. set Text ( "A apar ut o er oar e ! ") ;

    }publ i c voi d cl i ckedQui t But t on( ) {

    i f ( ob ! = nul l )ob. cl ose( ) ;

    Syst em. exi t ( 0) ;}

    publ i c st at i c voi d mai n( St r i ng ar gv[ ] ) {DBQueryGUI sql = new DBQueryGUI ( ) ;sql . i ni t ( ) ;sql . pack( ) ;sql . set Ti t l e( "J DBC/ ODBC GUI ") ;sql . show( ) ;

    }publ i c voi d wi ndowAct i vat ed( Wi ndowEvent e) {}publ i c voi d wi ndowCl osed( Wi ndowEvent e) {}

    publ i c voi d wi ndowCl osi ng( Wi ndowEvent e) { Syst em. exi t ( 0) ;}publ i c voi d wi ndowDeact i vat ed( Wi ndowEvent e) {}publ i c voi d wi ndowDei coni f i ed( Wi ndowEvent e) {}publ i c voi d wi ndowI coni f i ed( Wi ndowEvent e) {}publ i c voi d wi ndowOpened(Wi ndowEvent e) {}

    }

    i mpor t j ava. sql . * ;cl ass Si mpl eSel ect {

    St r i ng r esul t set = new St r i ng( ) ;St r i ng ur l = "j dbc: odbc: St udent i DB";Connect i on con = nul l ;St at ement st mt = nul l ;

    publ i c Si mpl eSel ect ( ) t hr ows Cl assNot FoundExcept i on{Cl ass. f or Name( "sun. j dbc. odbc. J dbcOdbcDr i ver ") ;

    }publ i c bool ean cl ose( ) {

    try {con. cl ose( ) ;

    } cat ch ( SQLExcept i on sql x) {

    sql x. pr i nt St ackTr ace( ) ;ret ur n f al se;

    }r et ur n t r ue;

    }pr i vat e voi d di spResul t Set ( Resul t Set r s) {

    try {i nt i ;r esul t set =r esul t set . substr i ng( 0, 0) ;

    3

  • 8/13/2019 TehnJava_lab20

    4/12

    St r i ng sss = new St r i ng( ) ;Resul t Set MetaData rsmd = r s. get MetaDat a( ) ;i nt numCol s = r smd. get Col umnCount ( ) ;f or ( i = 1; i 1)r esul t set = r esul t set . concat ( ", ") ;

    sss = r smd. get Col umnLabel ( i ) ;r esul t set = r esul t set . concat ( sss);

    }r esul t set = r esul t set . concat ( "\ n") ;bool ean more = r s. next ( ) ;whi l e ( mor e) {

    f or ( i = 1; i 1)

    r esul t set = r esul t set . concat ( ", ") ;sss = ( rs . get St r i ng( i ) ) ;i f ( sss != nul l )

    r esul t set = r esul t set . concat ( sss);

    }r esul t set = r esul t set . concat ( "\ n") ;mor e = r s. next ( ) ;

    }} cat ch ( Except i on e) {

    r esul t set = nul l ;e. pr i nt St ackTr ace( ) ;

    }}publ i c bool ean open( ) {

    try {con = Dr i ver Manager . get Connect i on( ur l , " " , "" ) ;

    } cat ch ( Except i on sql x) {sql x. pr i nt St ackTr ace( ) ;ret ur n f al se;

    }r et ur n t r ue;

    }publ i c St r i ng quer yDat abase(St r i ng quer y) {

    try {quer y = quer y. t r i m( ) ;st mt = con. cr eat eSt at ement ( ) ;i f ( quer y. t oUpper Case( ) . st ar t sWi t h( "SELECT" ) ) {

    Resul t Set r s = st mt . execut eQuery( query) ;di spResul t Set ( r s) ;

    r s . cl ose( ) ;} el se {

    i nt nr r ow = st mt . execut eUpdate(quer y) ;}stmt . cl ose( ) ;

    } catch ( SQLExcept i on sql ex) {sql ex. pr i nt St ackTr ace( ) ;ret ur n nul l ;

    } cat ch ( j ava. l ang. Except i on ex) {

    4

  • 8/13/2019 TehnJava_lab20

    5/12

    ex. pr i nt St ackTr ace( ) ;ret ur n nul l ;

    }r et ur n r esul t set ;

    }}

    2. Se va utiliza aceeai bazde date Access StudentiDB, creatn cadrul laboratorului19. n continuare vom prezenta un program Java care prin intermediul unei interfee grafice JavaSwing permite utilizatorului, ntr-o manierfoarte simpl, slisteze toate nregistrrile din bazade date i sadauge noi nregistrri.

    i mpor t j ava. awt . *;i mpor t j ava. awt . event . *;i mpor t j avax. swi ng. *;i mpor t j ava. sql . * ;

    cl assMyQuery extends J Frame i mpl ement s Act i onLi st ener

    {pr i vat e J Spl i t Pane spl i t PaneV;pr i vat e J Panel panel 1;pr i vat e J Panel panel 2;pr i vat e J But t on l i st But t on;pr i vat e J But t on i nser t But t on;pr i vat e J But t on cl oseBut t on;pr i vat e Connect i on con;pr i vat e St at ement st mt ;st at i c J Text Ar ea t ext Ar ea;pr i vat e St r i ng r esul t set ;

    publ i c MyQuery( ){set Ti t l e( " J DBC- Swi ng exampl e" ) ;set Si ze( 500, 700 ) ;set Backgr ound( Col or . gr ay ) ;t hi s. set Def aul t Cl oseOperat i on( Wi ndowConst ant s. DI SPOSE_ON_CLOSE) ;

    creat ePanel 1( ) ;creat ePanel 2( ) ;

    spl i t PaneV = new J Spl i t Pane( J Spl i t Pane. HORI ZONTAL_SPLI T ) ;

    get Cont ent Pane( ) . add( spl i t PaneV) ;spl i t PaneV. setLef t Component ( panel 1 ) ;spl i t PaneV. setRi ght Component ( panel 2 ) ;

    r esul t set =new St r i ng( ) ;St r i ng ur l = " j dbc: odbc: St udent i DB";try {

    Cl ass. f or Name( "sun. j dbc. odbc. J dbcOdbcDr i ver " ) ;}

    5

  • 8/13/2019 TehnJava_lab20

    6/12

    cat ch( j ava. l ang. Cl assNot FoundExcept i on e){

    System. er r . pr i nt ( "Cl assNot FoundExcept i on: ") ;Syst em. er r . pr i nt l n( e. get Message( ) ) ;

    }

    try {con = Dr i ver Manager . get Connect i on( ur l , " " , "" ) ;st mt = con. cr eat eSt atement ( ) ;

    }

    cat ch( SQLExcept i on ex){

    Syst em. er r . pr i nt l n( "SQLExcept i on: " + ex. get Message( ) ) ;}

    }

    publ i c voi d cr eat ePanel 1( )

    {panel 1 = new J Panel ( ) ;panel 1. setLayout ( new Gr i dLayout ( 3, 1) ) ;l i st But t on=new J But t on( "Li st al l ") ;panel 1. add( l i st But t on) ;i nser t But t on=new J But t on( "I nser t ") ;panel 1. add( i nser t But t on) ;cl oseBut t on=new J But t on( "Cl ose") ;panel 1. add( cl oseBut t on) ;l i st But t on. addAct i onLi stener ( t hi s) ;i nser t But t on. addActi onLi st ener ( t hi s) ;cl oseBut t on. addActi onLi st ener ( t hi s) ;}

    publ i c voi d cr eat ePanel 2( ){panel 2 = new J Panel ( ) ;panel 2. setLayout ( new Bor der Layout ( ) ) ;panel 2. add( new J Label ( "Resul t s di spl ay: " ) , Bor der Layout . NORTH ) ;t ext Ar ea=new J Text Ar ea( ) ;

    J Scr ol l Pane scr ol l Pane = new J Scr ol l Pane( ) ;scrol l Pane. get Vi ewpor t ( ) . add( t ext Ar ea ) ;panel 2. add( scr ol l Pane, Bor der Layout . CENTER ) ;t ext Ar ea. set Edi t abl e( f al se) ;}

    publ i c voi d act i onPer f or med( Act i onEvent e) {

    i f ( e. get Sour ce( ) == l i st But t on )Li st ( ) ;

    el se i f ( e. get Sour ce( ) == i nser t But t on ){

    MyI nser t i nser t Frame=new MyI nser t ( st mt ) ;i nser t Fr ame. set Vi si bl e( t r ue) ;

    6

  • 8/13/2019 TehnJava_lab20

    7/12

    }el se i f ( e. get Sour ce( ) == cl oseBut t on ){

    try {stmt . c l ose( ) ;

    con. c l ose( ) ;} cat ch ( SQLExcept i on sql x) {

    sql x. pr i nt St ackTr ace( ) ;}

    Syst em. exi t ( 0) ;}

    }

    pr i vat e voi d di spResul t Set ( Resul t Set r s) {try {

    i nt i ;r esul t set = r esul t set . subst r i ng( 0, 0) ;

    St r i ng sss = new St r i ng( ) ;Resul t Set MetaData rsmd = r s. get MetaDat a( ) ;i nt numCol s = r smd. get Col umnCount ( ) ;f or ( i = 1; i 1)r esul t set = r esul t set . concat ( ", ") ;

    sss = r smd. get Col umnLabel ( i ) ;r esul t set = r esul t set . concat ( sss);

    }r esul t set =

    r esul t set . concat ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n" ) ;r esul t set = r esul t set . concat ( "\ n") ;bool ean more = r s. next ( ) ;

    whi l e ( mor e) {f or ( i = 1; i 1)r esul t set = r esul t set . concat ( ", ") ;

    sss = ( rs . get St r i ng( i ) ) ;i f ( sss != nul l )

    r esul t set = r esul t set . concat ( sss);}r esul t set = r esul t set . concat ( "\ n") ;mor e = r s. next ( ) ;

    }

    } cat ch ( Except i on e) {r esul t set = nul l ;e. pr i nt St ackTr ace( ) ;

    Syst em. out . pr i nt l n( "er oar e ") ;}

    }publ i c voi d Li st ( ){

    try {

    7

  • 8/13/2019 TehnJava_lab20

    8/12

    St r i ng si r ="sel ect * f r om student i ";Resul t Set r s=st mt . execut eQuer y(s i r ) ;di spResul t Set ( r s) ;r s . cl ose( ) ;i f ( r esul t set ! =nul l ) t ext Ar ea. set Text ( r esul t set ) ;el se t ext Ar ea. set Text ( "A apar ut o er oar e") ;

    t ext Ar ea. r epai nt ( ) ;

    }catch( SQLExcept i on ex)

    {Syst em. er r . pr i nt l n( "SQLExcept i on: " + ex. get Message( ) ) ;

    }cat ch ( j ava. l ang. Except i on ex) {

    ex. pr i nt St ackTr ace( ) ;

    }}

    publ i c stat i c voi d mai n( St r i ng ar gs[ ] ){MyQuer y mai nFr ame = new MyQuer y( ) ;mai nFr ame. set Vi si bl e( t r ue) ;}}

    i mpor t j ava. awt . *;i mpor t j ava. awt . event . *;i mpor t j avax. swi ng. *;i mpor t j avax. swi ng. t ext . *;i mpor t j avax. swi ng. event . *;i mpor t j ava. sql . * ;

    cl assMyInsert ext ends J Fr amei mpl ement s Document Li st ener , Act i onLi st ener

    {pr i vat e J Text Fi el d f i el d1;pr i vat e J Text Fi el d f i el d2;pr i vat e J Text Fi el d f i el d3;pr i vat e J But t on but t on1;pr i vat e J But t on but t on2;pr i vat e J But t on but t on3;pr i vat e J Label l abel 1;

    pr i vat e J Label l abel 2;pr i vat e J Label l abel 3;pr i vat e St at ement st mt ;

    publ i c MyI nsert ( St at ement st mt ){super ( ) ;t hi s. st mt =st mt ;set Ti t l e( " I nser t Fr ame" ) ;

    8

  • 8/13/2019 TehnJava_lab20

    9/12

    set Si ze( 300, 300 ) ;set Backgr ound( Col or . gr ay ) ;t hi s. set Def aul t Cl oseOperat i on( Wi ndowConst ant s. DI SPOSE_ON_CLOSE) ;

    J Panel t opPanel = new J Panel ( ) ;t opPanel . set Layout ( nul l ) ;get Cont ent Pane( ) . add( t opPanel ) ;

    f i el d1 = new J Text Fi el d( ) ;f i el d1. set Bounds( 20, 40, 260, 25 ) ;f i el d1. set FocusAccel er at or ( ' n' ) ;t opPanel . add( f i el d1 ) ;l abel 1 = new J Label ( "Nume: " ) ;l abel 1. set Bounds( 20, 15, 260, 20 ) ;l abel 1. set Label For ( f i el d1 ) ;l abel 1. set Di spl ayedMnemoni c( ' N' ) ;t opPanel . add( l abel 1 ) ;

    f i el d2 = new J Text Fi el d( ) ;

    f i el d2. set Bounds( 20, 90, 260, 25 ) ;f i el d2. set FocusAccel er at or ( ' g' ) ;t opPanel . add( f i el d2 ) ;l abel 2 = new J Label ( "Gr upa: " ) ;l abel 2. set Di spl ayedMnemoni c( ' G' ) ;l abel 2. set Bounds( 20, 65, 260, 20 ) ;l abel 2. set Label For ( f i el d2 ) ;t opPanel . add( l abel 2 ) ;

    f i el d3 = new J Text Fi el d( ) ;f i el d3. set Bounds( 20, 140, 260, 25 ) ;f i el d3. set FocusAccel er at or ( ' m' ) ;t opPanel . add( f i el d3) ;l abel 3 = new J Label ( "Medi a: " ) ;l abel 3. set Di spl ayedMnemoni c( ' M' ) ;l abel 3. set Bounds( 20, 115, 260, 20 ) ;l abel 3. set Label For ( f i el d3 ) ;t opPanel . add( l abel 3 ) ;

    but t on1 = new J But t on( "I nser t " ) ;but t on1. setBounds( 20, 180, 70, 25 ) ;but t on1. set Enabl ed( f al se ) ;t opPanel . add( but t on1 ) ;but t on1. addActi onLi st ener ( t hi s) ;

    but t on2 = new J But t on( "Reset " ) ;but t on2. setBounds( 110, 180, 70, 25 ) ;t opPanel . add( but t on2 ) ;but t on2. addActi onLi st ener ( t hi s) ;

    but t on3 = new J But t on( "Cl ose" ) ;but t on3. setBounds( 200, 180, 80, 25 ) ;t opPanel . add( but t on3 ) ;but t on3. addActi onLi st ener ( t hi s) ;

    9

  • 8/13/2019 TehnJava_lab20

    10/12

    / / Add a document l i st ener t o t he l ast t wo f i el dsDocument document = f i el d2. get Document ( ) ;document . addDocument Li st ener ( t hi s ) ;Document document 1 = f i el d3. get Document ( ) ;document 1. addDocument Li st ener( t hi s ) ;

    }

    publ i c voi d act i onPer f or med( Act i onEvent e ){

    i f ( e. get Sour ce( ) == but t on1 ){

    try {St r i ng si r ="i nser t i nt o student i val ues( ' "

    +f i el d1. get Text ( ) +"' , "+f i el d2. get Text ( ) +", "+f i el d3. get Text ( ) +") ";

    st mt . execut eUpdat e( si r ) ;

    J Opt i onPane di al og = new J Opt i onPane( ) ;di al og. showConf i r mDi al og( t hi s, "I nser t i on compl et ed! ","Pl ai n" , J Opt i onPane. DEFAULT_OPTI ON,

    J Opt i onPane. PLAI N_MESSAGE, nul l ) ;}

    catch( SQLExcept i on ex){

    Syst em. er r . pr i nt l n( "SQLExcept i on: " + ex. get Message( ) ) ;J Opt i onPane di al og = new J Opt i onPane( ) ;di al og. showMessageDi al og( t hi s,

    "Err or ! I nser t i on not compl et ed. ","Err or" , J Opt i onPane. ERROR_MESSAGE ) ;

    }}

    el se i f ( e. get Sour ce( ) == but t on2 ){

    f i el d1. setText ( " " ) ;f i el d2. setText ( " " ) ;f i el d3. setText ( " " ) ;

    }el se i f ( e. get Sour ce( ) == but t on3 ){

    t hi s . di spose( ) ;}el se

    {/ / Get t he sour ce of t he act i on event

    J Label l abel = ( J Label ) e. get Sour ce( ) ;/ / Gi ve t he associ ated component t he f ocusComponent f i el dComponent = l abel . get Label For ( ) ;f i el dComponent . r equest Focus( ) ;}}

    10

  • 8/13/2019 TehnJava_lab20

    11/12

    / / Handl e i nser t i ons i nt o t he t ext f i el dpubl i c voi d i nser t Update( Document Event event ){St r i ng sSt r i ng = f i el d2. get Text ( ) ;St r i ng sSt r i ng1 = f i el d3. get Text ( ) ;try {

    i nt i Val ue = I nt eger . par seI nt ( sSt r i ng ) ;doubl e dVal ue=Doubl e. parseDoubl e( sSt r i ng1) ;but t on1. set Enabl ed( t r ue ) ;}cat ch( Number Format Except i on e ){but t on1. set Enabl ed( f al se ) ;}}

    / / Handl e del et i ons f r om t he t ext f i el dpubl i c voi d r emoveUpdat e( Document Event event )

    {/ / Pr event t he user f r om ent er i ng a bl ank f i el di f ( f i el d1. get Text ( ) . l engt h( ) == 0 | | f i el d2. get Text ( ) . l engt h( ) == 0

    | | f i el d3. get Text ( ) . l engt h( ) == 0)but t on1. set Enabl ed( f al se ) ;el se

    {i nser t Updat e( event ) ;

    }}publ i c voi d changedUpdat e( Document Event event ) {}}

    III. MODUL DE LUCRU1. Se editeaz codul sursal programului Java folosind un editor de text disponibil(de ex., se

    poate utiliza Notepad).2. Se salveaz fiierul cu extensia .java. Fiierul trebuie salvat la urmtoarea locaie:

    c:\JBulider7\jdk1.3.1\bin 3. Compilarea aplicaiei Java se va face din linia de comand. Se poate proceda astfel. Se

    deschide o fereastrMS-Dos: Start ->Run, se tiprete commandn csua de text i se apasbutonul OK. Printr-o schimbare de directoare i subdirectoare se trece la locaia:c:\JBulider7\jdk1.3.1\bin. Sau, se lanseaz WindowsCommander. Se trece la locaiac:\JBulider7\jdk1.3.1\bin. Se deschide o fereastrMS-Dos: Commander ->Run Dos.

    4. Pentru compilare, se tiprete la prompter javac nume_fiier_surs.javai se apasEnter.De ex., dac fiierul se numete Test.java, se va scrie javac Test.java. n cazul n careprogramul conine erori acestea vor fi semnalate i afiate n fereastra MS-Dos, dupcare vaapare iar prompter-ul. Dacprogramul nu conine erori i compilarea se face cu succes, atunciva apare numai prompter-ul.

    11

  • 8/13/2019 TehnJava_lab20

    12/12

    5. Pentru rularea unei aplicaii Java stand-alone, se lanseaz interpretorul Java. Se tiprete laprompter urmtoarea comandjava nume_clas_care_conine_maini se apasEnter. Deex., dac clasa din program care conine metodamain( ) se numete Test, se va scrie javaTest.

    6. Dacprogramul Java este un applet, se editeazfiierul .html. Se salveazn acelai directorcu fiierul .class rezultat n urma compilrii cu succes a fiierului surs java. Apoi pentrurulare se poate utiliza appletviewer nume.html.Alternativ, dup compilarea aplicaiei Java, fiierul .class mpreun cu fiierul .html pot fimutate n orice alt director (nu trebuie neaprat s fie n c:\JBulider7\jdk1.3.1\bin ). Sencarcfiierul .htmlntr-un browser Web (ex., Internet Explorer).

    IV. TEM1. Se vor parcurge toate exemplele prezentate n platforma de laborator testndu-se practic.2. Modificai programul 2 din laborator, optimiznd interfaa, astfel ca afiarea informaiilor

    din baza de date sse facntr-un tabel (JTable).

    12