2024 Net Beans SQL moodle.pdf
Document Details
Uploaded by FreeLoyalty
Tags
Full Transcript
04/25/2024 java.net Razred InetAddress predstavlja IP naslov naslov lahko oblikujemo na več načinov: static InetAddress getByName(String host) static InetAddress[] getgetByAddress(byte[] addr) static InetAddr...
04/25/2024 java.net Razred InetAddress predstavlja IP naslov naslov lahko oblikujemo na več načinov: static InetAddress getByName(String host) static InetAddress[] getgetByAddress(byte[] addr) static InetAddress getLocalHost() omogoča pretvorbo imena v IP številko in obratno 1 04/25/2024 Razred URL - informacije URL naslov= new URL(“https://www.um.si/index.html"); System.out.println("protokol: "+ naslov.getProtocol()); System.out.println("racunalnik: "+ naslov.getHost()); System.out.println("vrata: "+ naslov.getPort()); System.out.println("zbirka: "+ naslov.getFile()); System.out.println("referenca: "+ naslov.getRef()); System.out.println("pot: "+ naslov.getPath()); System.out.println("uporabnik: "+ naslov.getUserInfo()); Razred URL – branje vsebine URL naslov=new URL("http://ii.uni-mb.si/"); String vrstica=null; try { InputStreamReader isr=new InputStreamReader(naslov.openStream()); BufferedReader vhod = new BufferedReader(isr); while((vrstica = vhod.readLine()) != null) System.out.println(vrstica); vhod.close(); }catch(IOException e) { System.out.println("Napaka pri branju"); } 2 04/25/2024 Razred URL - openConnection URL naslov= new URL("https://www.um.si");; URLConnection povezava=naslov.openConnection(); povezava.connect(); String naziv=null; int i=1; do { naziv=povezava.getHeaderFieldKey(i); System.out.println(naziv+":"+povezava.getHeaderField( naziv)); i++; } while (naziv!=null); Razred - URLConnection predstavlja povezovalni element med URL naslovom in programom omogoča branje kot tudi pisanje na vir, predstavljen z URL naslovom pridobimo lahko tudi informacije, vezane na vir (npr. datum zadnje spremembe, tip zapisa, kodno stran, ipd.) 3 04/25/2024 java.net Socket ServerSocket Kaj je Socket Protokol TCP omogoča zanesljivo “point-to-point” komunikacijo. Odjemalec in strežnik vzpostavljata povezavo drug na drugega. Vsak program (odjemalec in strežnik) nameni za tako komunikacijo posebno priključno točko – SOCKET (vtičnico) SOCKET predstavlja eno stran dvo-smerne povezave. Strežnik - razred java.net.ServerSocket Odjemalec - razred java.net.Socket 4 04/25/2024 Vzpostavljanje povezave (1) Server ima rezervirana vrata za poslušanje zahtev odjemalcev Strežnik vrata zahteva po povezavi Odjemalec (ServerSocket) (port) (Socket) Odjemalec pozna naslov strežnika in vrata Vzpostavljanje povezave (2) Strežnik sprejme zahtevo odjemalca in vzpostavi povezavo. Ob sprejetju se na strežniku odprejo nova vrata (Socket), ki je posvečen le določenemu odjemalcu. Prav tako se odprejo vrata na odjemalcu. Osnovna vrata so namenjena le za sprejemanje zahtev odjemalcev vrata (port) Strežnik (ServerSocket) vrata vrata Odjemalec (port) povezava (port) (Socket) 5 04/25/2024 Pošiljanje/sprejemanje podatkov Primer strežnika try { vrata (port) ServerSocket server = new ServerSocket(4444); Socket vticnica = server.accept(); BufferedReader sprejem = new BufferedReader( new InputStreamReader ( vticnica.getInputStream() ) ); BufferedWriter oddaja = new BufferedWriter( new OutputStreamWriter( vticnica.getOutputStream() ) );... sprejem.close(); oddaja.close(); vticnica.close();server.close(); } catch (IOException e) { System.out.println("Tezave pri delu s tokovi"); } Pošiljanje/sprejemanje podatkov Primer odjemalca: ime strežnika try { vrata (port) Socket vticnica = new Socket(“localhost",4444); BufferedReader sprejem = new BufferedReader( new InputStreamReader ( vticnica.getInputStream() ) ); BufferedWriter oddaja = new BufferedWriter( new OutputStreamWriter( vticnica.getOutputStream() ) );... sprejem.close(); oddaja.close(); vticnica.close(); konzola.close(); } catch (UnknowHostException e) { System.out.println("Nezna naslov streznika"); } catch (IOException e) { System.out.println("Tezave pri delu s tokovi"); } 6 04/25/2024 Primer vrata (port) Strežnik (ServerSocket) vrata vrata Odjemalec (port) povezava (port) (Socket) “...” Nerazpoznavna zahteva VREME Vreme bo sončno Vzpostavljanje povezave (1) Server ima rezervirana vrata za poslušanje zahtev odjemalcev Strežnik vrata zahteva po povezavi Odjemalec (ServerSocket) (port) (Socket) Odjemalec pozna naslov strežnika in vrata 7 04/25/2024 Klepetalnica ChatStreznik vrata ChatOdjemalec 1 zahteva po povezavi (ServerSocket) (7777) (Socket) vrata (7777) ChatServer (ServerSocket) vrata vrata ChatOdjemalec 1 (xxxx) povezava (xxxx) (Socket) Vnos in pošiljanje v niti main vrata ChatStreznik (7777) inputStream outputStream outStream inputStream ChatOdjemalec 1 8 04/25/2024 Vnos in pošiljanje v niti main vrata ChatStreznik (7777) Uporabnik 1 inputStream outputStream outStream intputStream ChatOdjemalec 1 Vnos in pošiljanje v niti main inputStream outputStream Uporabnik 2 outStream inputStream ChatOdjemalec 2 Še o IO 9 04/25/2024 Razbijanje podatkov (“Tokenizing”) 23423423,Lucija Brezočnik, Gosposvetska ul. Maribor 43543453,Mitja Gradišnik, Smetanova ul. Maribor 89723233,Marjan Heričko, - Ločniki Obdelava tokov StreamTokenizer (java.io) Obdelava nizov StringTokenizer (java.util) StringTokenizer StringTokenizer x; x = new StringTokenizer ("Spe7///la, Moj//ca,tinasca", "/ in ,"); while (x.hasMoreTokens()) System.out.println(x.nextToken()); 10 04/25/2024 Izbiranje primernega toka Pri izbiri vrste tokov odgovorimo na vprašanja: Kakšen je format podatkov (tekstovni/znakovni ali binarni)? Binarni = razredi na osnovi InputStream-a in OutputStream-a Tekstovni = razredi na osnovi Reader-ja in Writer-ja Ali potrebujemo možnost naključnega dostopa? V primeru datotek izberemo RandomAccessFile Ali obdelujemo objektne podatke? ObjectInputStream ali ObjectOutputStream Kakšni so izvori in kakšni ponori podatkov? Za primere, da gre za mrežna vrata, datoteko, niz ali polje znakov imamo na voljo specializirane razrede. Ali potrebujemo možnost filtriranja? Podatke lahko filtriramo s pomočjo predpomnilnika ali varnostne vsote (checksum) Razred RandomAccessFile Pisanje Branje RandomAccessFile zbirka=null; ime_zbirke = args; zbirka = new String ime_zbirke = args; RandomAccessFile(ime_zbirke, String besedilo = args; "r"); zbirka = new int velikost = (int) zbirka.length(); RandomAccessFile(args, "rw"); byte[] buffer = new byte [velikost]; zbirka.writeBytes(args); zbirka.readFully(buffer, 0, velikost); for (int i=0; i< velikost; i++) System.out.print((char)buffer [i]); 11 04/25/2024 RandomAccessFile DataInput DataOutput RandomAccessFile +getFilePointer():long +seek(long) Pozicijo branja ali zapisovanja lahko določimo na zlog natančno v datoteki. Omogoča učinkovit dostop do podatkov v primeru datotek s fiksno dolžino zapisa (“fixed size record”). IBM Visual Age razvojno okolje vizualno programiranje 12 04/25/2024 Vizualno programiranje Visual Composition Editor integriran v IBM VAJa delamo toolbar z zrni bean free form surface palette status area Tipi povezav (connections) event-to-method povzroči, da se proži metoda, ko se pojavi dogodek (povezava med dvema zrnoma) parameter from property ali code ali method property-to-property povezuje dve podatkovni vrednosti event-to-code požene določeno metodo manipuliranega razreda, ko se pojavi dogodek (zrno - composit zrno) 13 04/25/2024 Primer Javanska Zrna Java Beans 14 04/25/2024 Komponente dedovanje in polimorfizem sta osnovni značilnosti objektne paradigme včasih pa bi kljub vsemu želeli neko komponento preprosto uporabiti takšno kot pač je (analogija - sestavljanje komponent v drugih industrijah) zgodovina: UI gradniki: VB, Delphi... V času načrtovanja nastavimo lastnosti (properties) npr. barva, font, baza na katero se poveže… znotraj razvojnega okolja - ob zagonu programa te lastnosti veljajo dogodki, ki se lahko pojavijo povežemo z neko programsko kodo Kako? Dinamični vpogled z uporabo mehanizma “reflection” - dobimo informacije o lastnostih in dogodkih, ki jih podpira komponenta 15 04/25/2024 Java Beans JavaBeans are classes that encapsulate many objects into a single object (the bean). They are serializable, have a zero-argument constructor, and allow access to properties using getter and setter methods. The name "Bean" was given to encompass this standard, which aims to create reusable software components for Java. Java zrna Java Beans – Javin/javanski komponentni model Java komponenta je preprosto - razred!! ni potrebno pisati posebne kode ali uporabljati posebnih razširitev jezika (včasih za VB in Delphi) potrebno je ustrezno poimenovati metode ime razvojnemu okolju razkrije, ali gre za lastnost, dogodek ali navadno metodo 16 04/25/2024 Dogovori glede poimenovanja za lastnosti getXxx, setXxx za logične (boolean) isXxx za dogodke uporaba pristopa poslušalcev navadne metode so public Zrno = črna škatla Metode zrna (vmesnik) Dogodki zrna Lastnosti zrna 17 04/25/2024 Komponente zrno - gradnik pri CBD zrno v zrnu v zrnu... ne le vizualna zrna (ta izpeljana iz Component)! značilnosti vpogled (introspection) prilagodljivost (customization) komunikacija z dogodki (events) obstojnost (persistence) Nova tipa lastnosti Vezane lastnosti (Bound properties) PropertyChange ZRNO ZRNO ZRNO ZRNO Omejene lastnosti (Constrained properties) ZRNO ZRNO ZRNO veto ZRNO 18 04/25/2024 Vpogled ali introspekcija V času izvajanja (run-time) in razvoja (design-time) potrebujemo mehanizem, ki nam razkrije dostopne (javne) lastnosti, metode in dogodke. Temu postopku pravimo vpogled oz. introspekcija Za enostavna zrna, ki ne vsebujejo posebnih informacij za razkrivanje vmesnika, uporabljamo nizko nivojski mehanizem jave za odraz (Reflection), vpeljan z 1.1 Kompleksnejša zrna imajo priložen še poseben razred - implementacijo vmesnika BeanInfo, ki vsebuje podrobne informacije o razkrivanju vmesnika razred Introspector analizira zrno metoda getBeanInfo(...) vrne BeanInfo za določen razred, nakar lahko pridobimo deskriptorje lastnosti, metod, poslušalcev... Skratka za vpogled običajno poskrbijo orodja Introspekcija oz. vpogled možen nižji nivo – Reflection API meta informacije zrna - BeanInfo ni posebnega jezika za opis zrna, držimo pa se pravil getter in setter metode zrna se obnašajo po pravilih, ki so zastavljena v Javinem varnostnem modelu 19 04/25/2024 Swing gradniki nabor prilagodljivih vizualnih gradnikov ob vpeljavi del JFC (Java Foundation Classes) Ime gradnikov: JGradnik ni “peer” razredov na gostujočem sistemu (lightweight komponente ) možnost zagotovitve enovitega izgleda (L&F) na različnih platformah, privzet izgled: Metal uporaba vzorca MVC (Model View Controler) Delitev odgovornosti 20 04/25/2024 Kombiniran pogled in nadzornik- delegat Model spremenil prosim, spremeni sem se posreduj podatke podatke View Controller Delegat Ločitev med pogledom in nadzornikom ni tako pomembna, kot ločitev med modelom in delegatom!!! JTable Dve tabeli prikazujeta identične podatke!!! 21 04/25/2024 Prejšnjič sinhronizacija niti (synchonized) wait() in notify() le v synchonized blokih knjižnica.net URL, URI, INetAddress, URLConnection, HttpURLConnection, (Server)Socket vizualno programiranje javanski komponentni model – Java Beans setLastnost, getLastnost Metode zrna (vmesnik) javne metode dogodki na osnovi metod addXXXListener Dogodki zrna razred s konstruktorjem brez argumentov, Serializable Swing komponente so javanska zrna Lastnosti zrna vzorec MVC - V&C v delegatu Razred File omogoča delo z zbirkami Metode za delo z zbirkami (razen branja in pisanja) separator separatorChar getPath getAbsolutePath canRead isFile ohranja neodvisnost od lenght mkdir operacijskega sistema delete hashCode getName canWrite ni metode za kreiranje zbirke - pathSeparator pathSeparatorChar v ta namen uporabimo getParent exists FileWriter isDirectory isAbsolute renameTo mkdirs equals toString lastModified list 22 04/25/2024 Informacije o zbirki public class Zbirke { public static void main PRIMER: (String args[]) { java Zbirke c:\DELO File zbirka = new File(args); if (zbirka.exists()) { Informacije o c:\DELO : if (zbirka.isDirectory()) O c:\DELO je imenik! B if (zbirka.isFile()) V Branje omogoceno. if (zbirka.canRead()) E Pisanje omogoceno. S if (zbirka.canWrite()) T Ime zbirke je absolutno. if (zbirka.isAbsolute()) I L } A } } Delo z imeniki public class IzpisiImenik { public static void main (String args[]) { PRIMER: String imena[] = new String; java Imeniki String ime_zbirke; c:\Util File imenik = new File(args); imena = imenik.list(); c:\Util\ARJ.EXE for (int i=0; i < imena.length; i++) { c:\Util\PKUNZIP.EXE ime_zbirke = args + c:\Util\PKZIPFIX.EXE File.separator + imena[i]; System.out.println(ime_zbirke); c:\Util\RAR.CFG } c:\Util\RAR.DOC } c:\Util\RAR.EXE } c:\Util\UNZIP.EXE 23 04/25/2024 Java.sql Shranjevanje v relacijske podatkovne baze Knjižnica JDBC (Java Database Connectivity) pomembno za poslovne aplikacije! 24 04/25/2024 Kaj je RDBMS Relacijska podatkovna baza ATRIBUTI IME PRIIMEK LETNIK VPISNA ŠTEVILKA Z Bojan Novak 3 998732 A P Miha Krajnc 1 998754 I S Matjaž Lik 3 998766 I Boris Križanič 4 998721 25 04/25/2024 Jezik SQL PRIMER STAVKA SQL jezik za delo s podatkovnimi bazami SELECT * FROM student WHERE ime = "Miha" omogoča iskanje, spreminjanje, brisanje in dodajanje zapisov Iz tabele z imenom student želimo pridobiti vse zapise katerim je ime Miha. je standardiziran Dostop do baze java.sql potrebujemo JDBC gonilnik (obstaja več tipov) JDBC – Java Database Connectivity 26 04/25/2024 Dostop do podatkov v bazi Naložimo gonilnik za podatkovno bazo Class.forName("gonilnik"); Vzpostavimo povezavo s podatkovno bazo Connection povezava = DriverManager.getConnection("povezovalni_niz"); Ustvarimo stavek Statement stavek=povezava.createStatement(); Izvedemo povpraševanje ResultSet rs = stavek.executeQuery("SQL/SQL-J stavek"); Obdelava podatkov Izluščimo rezultate while (rs.next()) { atribut = rs.get(1); atribut2 = rs.get(2); } Zaključimo delo rs.close(); stavek.close(); povezava.close(); 27 04/25/2024 Primer BAZA Povezava.java Povezovanje s podatkovno bazo Naložimo razred gonilnika z uporabo metode forName() razreda Class. Izvedemo povezavo z metodo getConnection(String url) razreda DriverManager 28 04/25/2024 Connection Interface Pomembne metode close() - zapre povezavo do podatkovne baze getMetaData() - vrne objekt, ki vsebuje podrobne informacije o podatkovni bazi na katero smo povezani createStatement() - oblikuje objekt z SQL stavkom prepareStatement() - podobno kot prejšnja, le da je SQL stavek predhodno obdelan in je zato izvajanje učinkovitejše Izvajanje povpraševanja Potek izvajanja SQL stavka je sledeč: pripravimo si niz v obliki SQL stavka pripravimo si objekt tipa Statement prožimo eno izmed metod za izvršitev stavka, kateri kot parameter podamo oblikovan SQL niz. 29 04/25/2024 Vrnjeni podatki (ResultSet) Rezultat povpraševanja dobimo v objektu tipa ResultSet. Z metodo getMetaData() dobimo informacijo o zapisih (imena stolpcev, število stolpcev, ipd.). Podatke razčlenimo tako, da beremo zapise v zanki in jih izpišemo. Meta-podatki Iz same povezave (Connection) lahko pridobimo informacije (meta podatke): Seznam katalogov Seznam shem Seznam tabel... Iz rezultirajoče množice (ResultSet) lahko pridobimo informacije (meta podatke): Seznam stolpcev Podatkovni tipi posameznega stolpca Imena stolpcev Ime tabele... 30 04/25/2024 javax.sql vmesnik DataSource (z metodo getConnection) Pridobitve: imena ne „zapečemo“ v svojo kodo (uporabljamo logična imena) upravljanje in dodeljevanje povezav iz „bazena“ (večuporabniško in porazdeljeno delovanje – če podpira implementacija) „sistemski del“ (administratorski) 1. Kreiranje primerka razreda, ki implementira DataSource 2. Nastavitev lastnosti 3. Registracija preko storitev poimenovanja JNDI API (Java Naming and Directory Interface) Razvijalec --------------------------------------------------------------------------------------------- // uporaba - razvijalec Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/obracuniDB"); ds.getConnection(); … nato standardno … 31 04/25/2024 Primer za mysql // kreiranje primerka com.dbaccess.BasicDataSource ds = new com.dbaccess.BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/CustomerDB"); ds.setUsername(„root"); ds.setPassword(„metka"); ds.setDescription(„Baza računov strank za zaračunavanje"); //registracija preko JNDI API-ja Context ctx = new InitialContext(); ctx.bind("jdbc/obracuniDB", ds); // določimo logično ime Lambda izrazi Lamda je anonimna funkcija (e) -> {} parameter -> expression (parameter1, parameter2) -> expression (parameter1, parameter2) -> { blok kode} 32 04/25/2024 Funkcijski vmesniki @Functionalnterface natančno ena abstraktna metoda SAM (Single Abstract Method) primeri uporabe lambda izrazov 33