Videregående programmering i Java

Størrelse: px
Starte visningen fra side:

Download "Videregående programmering i Java"

Transkript

1 Videregående programmering i Java Dag 11 Persistens Fremlæggelse af programmering/status for projekter medbring klassediagram og skærmbillede Projektvejledning JNI og kald til maskinkode/c/c++ fra Java Designmønstrenes brug i standardbibliotekerne Persistens og strategier til databaseadgang, evt.: Evt.: Objektpersistens og JDO Java Data Objects Internationalisering Læsning: VP 7, VP 8, VP 10, evt. PRO kap.9 (om JNI) Dette materiale er under Åben Dokumentlicens, se

2 Sidste gang - spørgsmål? JUnit obligatorisk i jeres projekt Demo: Test af GUI Hvordan lave Test af GUI om til tutorial

3 Persistensproblemet Strategier til databaseadgang Rigtig mange muligheder, f.eks.: JDBC kode blandet sammen med resten af koden JDBC kode i dedikerede klasser JDBC RowSet ResultSet, der også opdaterer databasen CachedRowSet kan eksistere løsrevet fra databasen WebRowSet giver XML, der kan transformeres, f.eks. med XSLT (XSL style sheet) Javas XML behandling EJB Enterprise JavaBeans ét serverobjekt pr. række JDO Java Data Objects ét objekt pr. række Hibernate Proprietære løsninger Giver mulighed for grafiske databasekomponenter Oracle JDeveloper ADF Application Developer Framework Borland JBuilder: DataModule IBM WebSphere Studio Bedste løsning? Afhænger af omstændighederne! Hvor omfattende databasedelen af ens applikation er Hvor meget man forventer den senere skal vedligeholdes.

4 JDBC databaseadgang Indlæse driveren Med Java under Windows følger en standard JDBC-ODBC-bro med, så man kan kontakte alle datakilder, der er defineret under ODBC: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Er det en anden database, skal man have en jar-fil med en driver fra producenten. Nyeste drivere kan findes på Driver til en Oracle-database (hedder typisk classes12.zip): Class.forName("oracle.jdbc.driver.OracleDriver"); Driver til en MySQL-database (hentes på Class.forName("com.mysql.jdbc.Driver") Etablere forbindelsen Herefter kan man oprette forbindelsen med (for en ODBC-driver): Connection forb = DriverManager.getConnection("jdbc:odbc:datakilde1"); Datakildens navn (her "datakilde1") skal være defineret i Windows. Databasedrivere JDBC-drivere findes i fire typer: Type 1: JDBC-ODBC-broen. Langsomste og kun til Windows. Type 2: Drivere skrevet i C eller C++ til den specifikke platform (normalt de hurtigste). Type 3: Platformsuafhængig (ren Java-) driver med databaseuafhængig kommunikationsprotokol Type 4: Platformsuafhængig (ren Java-) driver skrevet til at kommunikere med en specifik database (mest udbredte og næsten lige så hurtig som type 2). Oracle-database: Connection forb = DriverManager.getConnection( "jdbc:oracle:thin:@ora.javabog.dk:1521:student","jacob","jacob"); MySQL-database: DriverManager.getConnection("jdbc:mysql:///jacob","root","xyz");

5 JDBC databaseadgang

6 Lave JDBC-ODBC-bro til Access-fil Eksempel: 1. Denne computer 2. Kontrolpanel 3. Administration

7 Forbindelse til database (MySQL) Installér MySQL Hent fra mysql.com test database god i starten Grafiske værktøjer Installér JDBC driver Connector/J fra mysql.com Læg JAR fil i java/jre/lib/ext/ Kontakt test database: Class.forName("com.mysql.jdbc.Driver"); Connection forb = DriverManager.getConnection("jdbc:mysql:///test");

8 Forberedte SQL-kommandoer import java.sql.*; public class ForberedtSQL public static void main(string[] arg) throws Exception Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:///test"); // Forbered kommandoerne til databasen, f.eks. i starten af programmet: PreparedStatement indsætpstm = con.preparestatement( "INSERT INTO kunder (navn,kredit) VALUES(?,?)"); PreparedStatement hentpstm = con.preparestatement( "SELECT navn, kredit FROM kunder WHERE navn=?"); // under programudførelsen kan de forberedte kommandoer udføres mange gange: for (int i=0; i<100; i++) indsætpstm.setstring(1, "Brian"); indsætpstm.setint(2, i); indsætpstm.execute(); indsætpstm.setstring(1, "Hans' venner"); // bemærk ' i strengen indsætpstm.setint(2, 1042+i); indsætpstm.execute(); hentpstm.setstring(1, "Hans' venner"); ResultSet rs = hentpstm.executequery(); // bemærk ' i SQL-forespørgslen // man løber igennem svaret som man plejer while (rs.next()) String navn = rs.getstring(1); double kredit = rs.getdouble(2); System.out.println(navn+" "+kredit);

9 Samlede batch-opdateringer import java.sql.*; public class Batchopdateringer public static void main(string[] arg) throws Exception Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:///test"); PreparedStatement pstmt = con.preparestatement( "INSERT INTO kunder (navn,kredit) VALUES(?,?)"); pstmt.setstring(1, "Hans"); pstmt.setint(2, 142); pstmt.addbatch(); pstmt.setstring(1, "Grethe"); pstmt.setint(2, 242); pstmt.addbatch(); // send ændringer til databasen pstmt.executebatch();

10 Uden automatisk commit import java.sql.*; public class UdenAutocommit public static void main(string[] arg) throws Exception Class.forName("oracle.jdbc.driver.OracleDriver"); Connection forb = DriverManager.getConnection( "jdbc:oracle:thin:@ora.javabog.dk:1521:student","jacob","jacob"); try forb.setautocommit(false); Statement stmt = forb.createstatement(); stmt.executeupdate("insert into KUNDER(NAVN,KREDIT) values('jacob',-17)"); stmt.executeupdate("insert into KUNDER(NAVN,KREDIT) values('brian', 0)"); // flere transaktioner... System.err.println("Alt gik godt, gør ændringerne forpligtigende"); forb.commit(); catch (Exception e) e.printstacktrace(); System.err.println("Noget gik galt! Annullerer ændringerne..."); forb.rollback(); finally // Husk at sætte auto-commit tilbage, af hensyn til andre transaktioner forb.setautocommit(true);

11 import java.sql.*; public class BenytMetadataOgUdskrivTabel Metadata /** Udskriver et ResultSet pænt. Finder selv ud af kolonnenavnene. */ public static void udskriv(string titel, ResultSet rs) throws Exception ResultSetMetaData rsmd = rs.getmetadata(); int antalkolonner = rsmd.getcolumncount(); System.out.println(); System.out.println(" " + titel + " ("+antalkolonner+" kolonner)"); // udskriv kolonnenavnene for (int i=1; i<=antalkolonner; i++) skrivformateret(rsmd.getcolumnname(i)); System.out.println(); // udskriv cellerne i hver række while (rs.next()) for (int i=1; i<=antalkolonner; i++) skrivformateret(""+rs.getstring(i)); System.out.println(); System.out.println(" "); public static void main(string[] arg) throws Exception Class.forName("oracle.jdbc.driver.OracleDriver"); Connection forb = DriverManager.getConnection( "jdbc:oracle:thin:@ora.javabog.dk:1521:student","jacob","jacob"); DatabaseMetaData dmd = forb.getmetadata(); System.out.println("DatabaseProductName = "+dmd.getdatabaseproductname()); System.out.println("DriverName = "+dmd.getdrivername()); System.out.println("MaxRowSize = "+dmd.getmaxrowsize()); ResultSet rs = dmd.gettables(null, "JANO", "%", null); udskriv("tabeller i databasen", rs); Statement stmt = forb.createstatement(); rs = stmt.executequery("select * from KUNDER"); udskriv("kunder", rs);

12 import java.sql.*; public class BenytMetadataOgUdskrivTabel Metadata /** Udskriver et ResultSet pænt. Finder selv ud af kolonnenavnene. */ public static void udskriv(string titel, ResultSet rs) throws Exception ResultSetMetaData rsmd = rs.getmetadata(); int antalkolonner = rsmd.getcolumncount(); System.out.println(); System.out.println(" " + titel + " ("+antalkolonner+" kolonner)"); // udskriv kolonnenavnene for (int i=1; i<=antalkolonner; i++) skrivformateret(rsmd.getcolumnname(i)); System.out.println(); // udskriv cellerne i hver række while (rs.next()) for (int i=1; i<=antalkolonner; i++) skrivformateret(""+rs.getstring(i)); System.out.println(); DatabaseProductName = Oracle System.out.println(" "); DriverName = Oracle JDBC driver MaxRowSize = 2000 public static void main(string[] arg) throws tabeller Exception i databasen (5 kolonner) TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE TABLE_REMARKS Class.forName("oracle.jdbc.driver.OracleDriver"); null JANO KUNDER TABLE null Connection forb = DriverManager.getConnection( null JANO PERSONER TABLE null "jdbc:oracle:thin:@ora.javabog.dk:1521:student","jacob","jacob"); kunder (2 kolonner) DatabaseMetaData dmd = forb.getmetadata(); NAVN KREDIT System.out.println("DatabaseProductName Jacob = "+dmd.getdatabaseproductname()); System.out.println("DriverName Brian = 0 "+dmd.getdrivername()); System.out.println("MaxRowSize Hans = 500 "+dmd.getmaxrowsize()); ResultSet rs = dmd.gettables(null, "JANO", "%", null); udskriv("tabeller i databasen", rs); Statement stmt = forb.createstatement(); rs = stmt.executequery("select * from KUNDER"); udskriv("kunder", rs);

13 Opdatere og navigere i ResultSet De fleste ResultSet har metoder til at bevæge sig aktivt rundt i svaret og endda opdatere databasen gennem svaret. Det gøres med f.eks.: Statement stmt = con.createstatement(resultset.type_scroll_insensitive, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executequery("select NAVN, KREDIT from KUNDER"); Derefter kan man navigere rundt i ResultSet-objektet med f.eks.: rs.absolute(3); // går til 3. række i svaret (regnet fra 1 af) rs.previous(); // går en række tilbage (modsatte af next()) rs.first(); // går til starten af svaret (svarende til rs.absolute(1)) rs.relative(3); // går 3 rækker frem, dvs. til 4. række int r = rs.getrow();// giver hvilken række vi nu er i (her returneres 4) Man kan ændre i data med f.eks.: rs.updatestring("navn", "Jakob"); // ændrer kundens navn til Jakob rs.updaterow(); // opdaterer rækken i databasen rs.movetoinsertrow(); // flyt til speciel indsættelses-række rs.updatestring("navn", "Søren"); // sæt navn rs.updatedouble("kredit", 1000); // sæt kredit rs.insertrow(); // indsæt rækken i databasen rs.movetocurrentrow(); // gå væk fra speciel indsættelsesrække Derudover findes cancelrowupdates(), der annullerer opdateringer i en række, deleterow(), der sletter den aktuelle række fra både svaret og databasen, refreshrow(), der opfrisker ResultSet-objektet med de nyeste data.

14 JDBC RowSet RowSet = et sæt rækker hentet fra databasen =ResultSet+oprindelse+ændringer RowSet objekter giver mulighed ny arbejdsform Man behøver kun at spørge på data (f.eks. med SELECT) hvorefter man får et RowSet objekt. Når man skal opdatere nogle rækker, slette eller oprette nye, opererer man blot det eksisterende RowSet objekt Slut med at rode med INSERT, DELETE eller UPDATE sætninger i SQL. Flere undertyper af RowSet i JDK 1.5 JdbcRowSet =ResultSet+oprindelse+ændringer CachedRowSet =rækkerne er gemt i hukommelsen kan altså eksistere afbrudt fra databasen! Undertyper: FilteredRowSet og JoinRowSet WebRowSet =CachedRowSet repræsenteret som XML

15 JdbcRowSet import java.sql.*; import javax.sql.*; import javax.sql.rowset.*; import com.sun.rowset.*; // Bemærk: rowset.jar fra Sun skal være i CLASSPATH public class BenytJdbcRowSet public static void main(string[] arg) throws Exception Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:///test"); JdbcRowSetImpl jrs = new JdbcRowSetImpl(con); // Lav forespørglen jrs.setcommand("select * FROM kunder WHERE navn =?"); jrs.setstring(1,"jacob"); jrs.execute(); // Udskriv resultatet while (jrs.next()) String navn = jrs.getstring("navn"); double kredit = jrs.getdouble("kredit"); System.out.println(navn+" "+kredit);

16 CachedRowSet import java.sql.*; import javax.sql.*; import javax.sql.rowset.*; import com.sun.rowset.*; // Bemærk: rowset.jar fra Sun skal være i CLASSPATH public class BenytCachedRowSet public static void main(string[] arg) throws Exception Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:///test"); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM kunder"); CachedRowSetImpl crs = new CachedRowSetImpl(); crs.populate(rs); rs.close(); // Opdatér første række i CachedRowSet-objektet crs.first(); crs.updatedouble("kredit", -2000); crs.updaterow(); // Indsæt række crs.movetoinsertrow(); crs.updatestring("navn", "Poul Nyrup"); crs.updatedouble("kredit", ); crs.insertrow(); crs.movetocurrentrow(); // Opdatér data i databasen crs.seturl("jdbc:mysql:///test"); crs.setusername("root"); crs.setpassword(""); crs.acceptchanges();

17 WebRowSet public class BenytWebRowSet public static void main(string[] arg) throws Exception Class.forName("com.mysql.jdbc.Driver"); <column-index>1</column-index> Connection con = DriverManager.getConnection("jdbc:mysql:///test"); <column-display-size>32</column-di Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM kunder"); WebRowSetImpl wrs = new WebRowSetImpl(); wrs.populate(rs); rs.close(); // Generér XML wrs.writexml(system.out); // Opdatér første række i WebRowSet-objektet wrs.first(); wrs.updatedouble("kredit", -3000); wrs.updaterow(); // Indsæt række wrs.movetoinsertrow(); wrs.updatestring("navn", "Fogh"); wrs.updatedouble("kredit", 72); wrs.insertrow(); wrs.movetocurrentrow(); // Generér XML der nu også omfatter ændringerne wrs.writexml(system.out); // Opdatér data i databasen wrs.seturl("jdbc:mysql:///test"); wrs.setusername("root"); wrs.setpassword(""); wrs.acceptchanges(); <?xml version="1.0"?> <webrowset xmlns=" <metadata> <column-count>2</column-count> <column-definition> <column-name>navn</column-name> <table-name>kunder</table-name> <column-type-name>varchar</column- </column-definition> <column-definition> <column-index>2</column-index> <column-name>kredit</column-name> <schema-name></schema-name> <table-name>kunder</table-name> <column-type-name>float</column-ty </column-definition> </metadata> <data> <currentrow> <columnvalue>jacob</columnvalue> <columnvalue> </columnvalue> </currentrow> <currentrow> <columnvalue>brian</columnvalue> <columnvalue>0.0</columnvalue> </currentrow> <currentrow> <columnvalue>poul Nyrup</columnVal <columnvalue> </columnvalue </currentrow> </data> </webrowset>

18 import javax.jdo.*; Evt.: JDO - Java Data Objects private PersistenceManagerFactory pmf = null; // initialisering af pmf (udbyderspecifik, ikke vist) PersistenceManager pm; Transaction transaction; // oprette et objekt (beskrevet i XML-dokumentet) og gemme det Person p = new Person("Jacob", "Nordfalk", "nordfalk@mobilixnet.dk"); Object id; pm = pmf.getpersistencemanager(); transaction = pm.currenttransaction(); pm.makepersistent(p); id = pm.getobjectid(p); transaction.commit(); pm.close(); // ændre objekter pm = pmf.getpersistencemanager(); transaction = pm.currenttransaction(); p = (Person) pm.getobjectbyid(id, false); person.setname("troels"); transaction.commit(); pm.close();... // hente et objekt (der ikke skal ændres) pm = pmf.getpersistencemanager(); p = (Person) pm.getobjectbyid(id, false); pm.close();... // slette objekter pm = pmf.getpersistencemanager(); transaction = pm.currenttransaction(); p = (Person) pm.getobjectbyid(id, false); pm.deletepersistent(p); transaction.commit(); pm.close();

19 import java.util.date; public class Event private Long id; private String title; private Date date; Event() public Long getid() return id; private void setid(long id) this.id = id; public Date getdate() return date; Hibernate <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" " <hibernate-mapping> <class name="event" table="events"> <id name="id" column="event_id"> <generator class="increment"/> </id> <property name="date" type="timestamp" column="even <property name="title"/> </class> </hibernate-mapping> public void setdate(date date) this.date = date; public String gettitle() return title; public void settitle(string title) this.title = title; Session session = HibernateUtil.currentSession(); Transaction tx = session.begintransaction(); Event theevent = new Event(); theevent.settitle("besøge mor"); theevent.setdate(new Date()); session.save(theevent); tx.commit(); HibernateUtil.closeSession();

20 Resumé af skabende designmønstre Fabrikeringsmetode Fabrik en metode, der fabrikerer objekter for klienten (i stedet for at klienten selv opretter dem med new) et objekt med en fabrikeringsmetode Singleton sikring af, at der kun eksisterer ét objekt af en bestemt slags Abstrakt Fabrik/Toolkit er en Fabrik med nedarvinger, der sørger for objektoprettelsen. Hvilken nedarving der anvendes, bestemmes af en fabrikeringsmetode Bygmester simplificerer oprettelsen af nogle relaterede objekter ved at oprette og konfigurere objekterne (evt. trinvist) for klienten Prototype objekter oprettes ud fra eksisterende skabelon objekter Objektpulje genbrug de samme objekter igen og igen ved at huske dem i en pulje

21 Hyppigt anvendte designmønstre Proxy få metodekald til at gå gennem et mellem objekt (proxyen), der modtager metodekald på vegne af (fungerer som en erstatning) for det rigtige objekt og kalder videre i det rigtige objekt Herunder Virtuel Proxy/Doven Initialisering udskyde oprettelsen af det rigtige objekt til første gang, der er brug for det Adapter Iterator Facade et hjælpeobjekt, der får et objekt til at passe ind i et system ved at fungere som omformer mellem objektet og systemet hjælper med at gennemløbe nogle data forenkler brugen af et sæt objekter ved at give en simplificeret grænseflade til dem Observatør/Lytter at objekter kan 'abonnere' på, at en ting (hændelse) sker Dynamisk Binding at understøtte "plugin" klasser, der kan indlæses under kørslen og dermed udvide programmet, efter at det er skrevet

22 Resumé af andre designmønstre Uforanderlig objektet kan ikke ændres, når det først er oprettet Fluevægt Filter begræns antallet af objekter ved at sørge for, at der ikke bliver oprettet objekter med de samme data. I stedet er der mange referencer til de samme (unikke) objekter objekter, der "filtrerer" en strøm af data. Filtrene kan kombineres vilkårligt Lagdelt Initialisering klienten opretter et objekt direkte, og dette objekt opretter eller fremskaffer det, der i virkeligheden skal bruges og videredelegerer det meste af arbejdet til det Komposit/Rekursiv Komposition skabe et meget fleksibelt objekthierarki, ved at definere objekter, der kan indeholde andre objekter inkl. sin egen slags Kommando registrér brugerens ændringer af data, sådan at de kan fortrydes igen

23 JDBC og dens brug af designmønstre

24 Fremlæggelser af projekt

25 Eksterne kald Kald til eksterne programmer kan foregå på flere måder Starte ekstern proces Process proces = Runtime.getRuntime().exec(program) Nemt Kommunikation gennem netværksport eller standard input og output Begrænset kommunikation Let fejlfinding CPU krævende hvis processen skal starte ofte JNI Java Native Interface Koden lænkes ind i programmet Kommunikation sker ved almindelige metodekald Objekt med metoder erklæret native Sværere Man skal kunne kode f.eks. C eller C++ Fejl kan få den virtuelle maskine til at gå ned Meget effektivt Bindinger til specifikke systemer

26 import java.io.*; Starte ekstern proces public class KaldEksterntProgram public static void main(string[] args) throws Exception // Start programmet 'sort', der sorterer linerne i en fil Process proces = Runtime.getRuntime().exec("sort"); // sort kan læse data fra standard input og skriver dem på standard output PrintWriter s = new PrintWriter(proces.getOutputStream()); BufferedReader l = new BufferedReader( new InputStreamReader(proces.getInputStream())); s.println("en"); s.println("snegl"); s.println("på"); s.println("vejen"); s.println("er"); s.println("tegn"); s.println("på"); s.println("regn"); s.println("i"); s.println("spanien"); Fra sort: En Fra sort: er Fra sort: i Fra sort: på Fra sort: på Fra sort: regn Fra sort: snegl Fra sort: Spanien Fra sort: tegn Fra sort: vejen s.close(); // luk datastrømmen (sort sorterer først når den har alle data) proces.waitfor(); // vent på at processen er færdig // Læs resultatet fra programmets standard output og udskriv det String lin; while ((lin = l.readline())!= null) System.out.println("Fra sort: "+lin);

27 Java-klasser med maskinkode package vp; public class HejVerdenFraCKode public native void hejverden(); Generere vp_hejverdenfrackode.h javah jni vp.hejverdenfrackode #include "vp_hejverdenfrackode.h" #include <stdio.h> package vp; public class BenytHejVerdenFraCKode public static void main(string[] args) throws Exception System.out.println("Indlæser maskinkoden."); // Indlæs libhej.so (UNIX) eller hej.dll (Windows) System.loadLibrary("Hej"); System.out.println("Opretter objekt."); HejVerdenFraCKode objekt = new HejVerdenFraCKode(); System.out.println("Kalder metode i maskinkode."); objekt.hejverden(); JNIEXPORT void JNICALL Java_vp_HejVerdenFraCKode_hejVerden ( JNIEnv *e, jobject o) printf("hej Verden fra C++!\n"); Oversæt C++ kode til.so fil (eller.dll under Windows) g++ shared g I/usr/include/java vp_hejverdenfrackode.cpp o libhej.so Kør programmet java Djava.library.path=. vp.hejverdenfrackode Indlæser maskinkoden. Opretter objekt. Kalder metode i maskinkode. Hej Verden fra C++!

28 Biblioteker til at gøre JNI lettere EasyJNI JACOB: JAVA COM Bridge Jace /jw 0510 integrate.html

29 Bindinger til specifikke systemer OpenOffice.org UNO Styring af OpenOffice.org fra Java Åbne dokumenter, indsætte/læse/formatere tekst etc Demo Brug af OpenOffice.org som komponent fra Java Eksemplet er beregnet til videreudvikling Demo

30 Udskrift til printer Simplest mulige udskrivning (fra JDK 1.1) public void udskriv() java.awt.printjob pj = Toolkit.getDefaultToolkit().getPrintJob(this,"figurer",null); Graphics g = pj.getgraphics(); // Graphics-objekt til at tegne på papiret tegnfigurer(g); pj.end(); // Færdiggør siden med udskriften og send den til printeren Kun én side Meget lidt kontrol over sideformat Udskrift foregår ved tegning med et Graphics objekt

31 Udskrift til printer Mere avanceret udskrivning (fra JDK 1.2) public void udskriv() java.awt.print.printerjob pj = java.awt.print.printerjob.getprinterjob(); // implementér Printable-interfacet for at udskrive noget java.awt.print.printable p = new java.awt.print.printable() public int print(graphics g, java.awt.print.pageformat pf, int side) if (side > 4) return java.awt.print.printable.no_such_page; tegnfigurer(g); g.drawstring("side "+side, (int)pf.getimageablex(), (int)pf.getimageabley()+10); return java.awt.print.printable.page_exists; ; // eller: //java.awt.print.book b = new java.awt.print.book(); pj.setprintable(p); //b.append(p, pj.defaultpage()); //pj.setpageable(b); pj.printdialog(); // vis printerdialog hvor bruger kan vælge antal sider etc try pj.print(); // udskriv! catch (Exception ex) ex.printstacktrace(); Fuld kontrol over sideformat Flere sider (kan have forskellige sideformater) Udskrivningsdialog kender antal sider (med Pageable)

32 Udskrift til printer Java Print Service (fra JDK 1.3) Søgning efter printere med bestemte evner duplex, farve, PostScript,... Specificere formatet af det udskrevne Opløsning (DPI), antal kopier, prioritet,... Sende data Også i rå formater som PostScript PDF GIF, JPEG, PNG Eksempel: Udskrivning af PostScript fil, 5 dobbeltsides A4 kopier: FileInputStream psstream = new FileInputStream("file.ps"); DocFlavor psinformat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc mydoc = new SimpleDoc(psStream, psinformat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(mediasize.a4); aset.add(sides.duplex); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) DocPrintJob job = services[0].createprintjob(); job.print(mydoc, aset);

33 Mere læsning om udskrivning Basal udskrivning Udskrivning af flere sider Java Print Service Andre

34 Internationalisering Når et program skal anvendes af flere kulturer og sprog, opstår behov for, at programtekster, beløb og dato angives i de pågældende landes sprog. Internationalisering (også kaldet I18N) består i at gøre programmet sprogneutralt, ved at sørge for at: al formatering og fortolkning af tal, beløbs, dato og tidsangivelser sker afhængigt af sproget al sproglig tekst er flyttet til resursefiler. Programmørs arbejde Lokalisering består i at: oversætte resursefilerne til et bestemt sprog. (ikke programmeringskyndig) oversætters arbejde

35 Internationalisering import java.text.*; import java.util.*; public class BenytDateFormat public static void main(string arg[]) DateFormat klformat, datoformat, dkf; klformat = DateFormat.getTimeInstance(DateFormat.MEDIUM); datoformat = DateFormat.getDateInstance(DateFormat.FULL); dkf = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.SHORT); Date tid = new Date(); System.out.println( tid ); System.out.println( "Kl :"+ klformat.format(tid) ); System.out.println( "Dato :"+ datoformat.format(tid) ); System.out.println( "Tid :"+ dkf.format(tid) ); Kørt på da nsk PC Wed Feb 05 14:23:46 GMT+00: Kl :14:23:46 Dato :5. februar 2003 Tid : :23 Kørt på amerikansk PC Mon Dec 03 13:27:57 GMT+01: Kl: 1:27:57 PM Dato: Monday, December 3, 2001 Tid: Dec 3, :27 PM

36 Bruge Locale-objekter import java.text.*; import java.util.*; public class BenytDateFormat2 public static void main(string arg[]) DateFormat klformat, datoformat; Locale fransk = new Locale("fr","FR"); klformat = DateFormat.getTimeInstance(DateFormat.SHORT,fransk); datoformat = DateFormat.getDateInstance(DateFormat.LONG, fransk); Date tid = new Date(); System.out.println( "Kl: "+ klformat.format(tid) ); System.out.println( "Dato: "+ datoformat.format(tid) ); Kl: 14:23 Dato: 5 février 2003

37 De mulige lokalindstillinger import java.util.*; public class MuligeSprog public static void main(string arg[]) Locale[] lokalindstillinger = Locale.getAvailableLocales(); for (int i=0; i<lokalindstillinger.length; i++) Locale lokalindst = lokalindstillinger[i]; System.out.print(lokalindst+" "); // udkommentér hvis du vil se hvad sproget hedder på sproget selv //System.out.println(lokalindst.getDisplayName(lokalindst)); System.out.println( ); ar ar_ae ar_bh ar_dz ar_eg ar_iq ar_jo ar_kw ar_lb ar_ly ar_ma ar_om ar_qa ar_sa ar_sd ar_sy ar_tn ar_ye hi_in iw iw_il ja ja_jp ko ko_kr th th_th th_th_th zh zh_cn zh_hk zh_tw be be_by bg bg_bg ca ca_es cs cs_cz da da_dk de de_at de_ch de_de de_lu el el_gr en_au en_ca en_gb en_ie en_in en_nz en_za es es_ar es_bo es_cl es_co es_cr es_do es_ec es_es es_gt es_hn es_mx es_ni es_pa es_pe es_pr es_py es_sv es_uy es_ve et et_ee fi fi_fi fr fr_be fr_ca fr_ch fr_fr fr_lu hr hr_hr hu hu_hu is is_is it it_ch it_it lt lt_lt lv lv_lv mk mk_mk nl nl_be nl_nl no no_no no_no_ny pl pl_pl pt pt_br pt_pt ro ro_ro ru ru_ru sh sh_yu sk sk_sk sl sl_si sq sq_al sr sr_yu sv sv_se tr tr_tr uk uk_ua en en_us eo Locale objektet består af tre dele: Første del er sprogkoden, f.eks. da, sv, no, en, fr. En valgfri anden del er landekoden, f.eks. DK, NO, GB, DE, FR En valgfri tredje del er varianten inden for sprogområdet (f.eks. om valutaen er i euro).

38 Tekstindhold i resursefiler package sprogtest; import java.text.*; import java.util.*; public class BenytDateFormatMedResurser public static void main(string arg[]) ResourceBundle res = ResourceBundle.getBundle("sprogtest.Tekster"); DateFormat klformat, datoformat, dkf; klformat = DateFormat.getTimeInstance(DateFormat.MEDIUM); datoformat = DateFormat.getDateInstance(DateFormat.FULL); dkf = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.SHORT); Date tid = new Date(); System.out.println( res.getstring("kl_")+ klformat.format(tid) ); System.out.println( res.getstring("dato_")+ datoformat.format(tid) ); System.out.println( res.getstring("tid_")+ dkf.format(tid) ); # sprogtest.tekster.properties Tid_=Tid \: Kl_=Kl \: Dato_=Dato \: Kl : 14:23:50 Dato: 5. februar 2003 Tid : :23 # sprogtest.tekster_en.properties Tid_=Time \: Kl_=Time of day\: Dato_=Date \: Time of day : 3:07:28 PM Date : Monday, December 3, 2001 Time : Dec 3, :07 PM

Web- og serverprogrammering

Web- og serverprogrammering Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Web- og serverprogrammering Databasekommunikation - dag 7 Strategier til databaseadgang JDBC (Java DataBase Connectivity)

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010

Læs mere

14.1 Internationale programmer

14.1 Internationale programmer 14.1 Internationale programmer Når et program skal anvendes af flere kulturer og sprog opstår behov for at programtekster, beløb og datoangivelser afhænger af landet og sproget, og man må i gang med at

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007 MySQL i Java Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007 Hvad er MySQL? Det er et database system, som er gratis for os at bruge. Det er lidt mere besværligt i starten at bruge

Læs mere

Geografisk lokalisering i JSP

Geografisk lokalisering i JSP Denne guide er oprindeligt udgivet på Eksperten.dk Geografisk lokalisering i JSP Denne artikel forklarer lidt om hvorfor og hvordan man laver geografisk lokalisering og viser noget kode. Der er andre artikler

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Java-opgraderingskursus

Java-opgraderingskursus Java-opgraderingskursus Danmarks Meteorologiske Institut Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Et Javaprogram // Et simpelt program, der skriver "Hej

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

Læs mere

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002 Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002 På datalogi har vi en databaseserver, som de studerende på datalogi kan benytte til projekter og som også benyttes i forbindelse

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

Læs mere

med Java og Linux Jacob Nordfalk Linuxforum 2004 Lørdag 6. marts 17.00-17.45 Center for Videreuddannelse Ingeniørhøjskolen i København

med Java og Linux Jacob Nordfalk Linuxforum 2004 Lørdag 6. marts 17.00-17.45 Center for Videreuddannelse Ingeniørhøjskolen i København Webprogrammering med Java og Linux Jacob Nordfalk Center for Videreuddannelse Ingeniørhøjskolen i København Linuxforum 2004 Lørdag 6. marts 17.00-17.45 Program Om Jacob Nordfalk Reklame Intro til Java

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

En kort introduktion til JDBC

En kort introduktion til JDBC En kort introduktion til JDBC af Henrik Bulskov Datalogi Roskilde Universitetscenter 22. marts 2001 JDBC er et generelt klassebibliotek til kommunikation med databaser. Det er ikke målrettet en bestemt

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java VPJ dag 1 Introduktion og overblik over kurset Datastrukturer: Lister, mængder og iteratorer Opsamling: Grafikprogrammering, komponenter, containere og layout Bruge komponenter

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Webserverprogrammering

Webserverprogrammering Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Forskellige databaser

Forskellige databaser Denne guide er oprindeligt udgivet på Eksperten.dk Forskellige databaser Denne artikel beskriver kort forskellige database typer, produkter og API'er. Målet er at give et overblik over hvad der findes

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:... Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:... 9 Nogle HTML tags... 9 Databaser og PHP Når vi snakker

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

En Kort Introduktion til Oracle

En Kort Introduktion til Oracle En Kort Introduktion til Oracle Henrik Bulskov 12. februar 2001 bulskov@ruc.dk 1 Start SQL*Plus... 1 1.1 TELNET... 1 1.2 WINDOWS SQL PLUS... 2 2 Kør et SQL-script... 3 3 Hjælp i SQL*Plus... 3 4 Editering

Læs mere

System & Metode ApS præsenterer. En effektiv dokumentportal

System & Metode ApS præsenterer. En effektiv dokumentportal System & Metode ApS præsenterer En effektiv dokumentportal Den 7. september 2006 Velkommen Martin Hecht Olsen, Direktør System & Metode blev etableret i 1989 IBM Business Partner Salg direkte til kunde

Læs mere

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Øvelse 9. Klasser, objekter og sql-tabeller insert code here Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til

Læs mere

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

applikation----x----odbc driver manager----foobar ODBC driver----foobar database Denne guide er oprindeligt udgivet på Eksperten.dk ODBC i C/C++ Denne artikel beskriver hvordan man bruger ODBC i C/C++. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til VB.NET og ADO.NET. Der findes en tilsvarende artikel

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

SigmaT.

SigmaT. Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 10. april, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Import af rekursivt (parent-child) hierarki i Palo

Import af rekursivt (parent-child) hierarki i Palo Import af rekursivt (parent-child) hierarki i Palo Dette dokument beskriver hvordan et simpelt rekursivt (parent-child) hierarki kan importeres ind i Palo på forskellige måder via SQL og samtidig bibeholde

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Plugin-arkitektur med.net

Plugin-arkitektur med.net Denne guide er oprindeligt udgivet på Eksperten.dk Plugin-arkitektur med.net Denne artikel viser hvordan du kan lave en plugin-arkitektur i dit program. Gør det muligt for andre at skrive udvidelser til

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 5 Model View Controller arkitekturen Model View Controller arkitekturen (MVC) Evt.: Rekursion Læsning: VP 19 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Rigtig SQL Programmering

Rigtig SQL Programmering Rigtig SQL Programmering 1 SQL i Rigtige Programmer Indtil nu har vi brugt SQL direkte i kommandolinje promt/gui program, hvor vi kan lave forespørgsler til databasen I virkeligheden: Programmer kontakter

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Kom godt igang med Inventar registrering

Kom godt igang med Inventar registrering Kom godt igang med Inventar registrering (InventoryDB) (Med stregkodesupport) programmet fra PetriSoft Introduktion... 1 Inventar registrering... 2 Værktøjsudleje... 3 Service database til reperationer

Læs mere

Database programmerings tips

Database programmerings tips Denne guide er oprindeligt udgivet på Eksperten.dk Database programmerings tips Denne artikel vil introducere nogle problem stillinger med flere samtidige brugere, som man skal tænke på, når man udvikler

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Introduktion til SQL queries

Introduktion til SQL queries Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til SQL queries Denne artikel beskriver nogle forskellige muligheder i SQL queries. Eksemplerne skulle gerne være standard SQL og virke i

Læs mere

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML SQL kap 6-7 + 17-20 DDL og DML 1 De vigtigste SQL-sætninger Data Definition Language (DDL) create table: opretter en ny tabel create unique index: tilføjer et index til en tabel drop table : sletter en

Læs mere

SQL for MySQL-begyndere

SQL for MySQL-begyndere Denne guide er oprindeligt udgivet på Eksperten.dk SQL for MySQL-begyndere I denne artikel vil jeg prøve at beskrive MySQL på begynderniveau. SQL står for Structured Query Language, og er et sprog til

Læs mere

BILAG. til RAPPORT FRA KOMMISSIONEN TIL EUROPA-PARLAMENTET OG RÅDET

BILAG. til RAPPORT FRA KOMMISSIONEN TIL EUROPA-PARLAMENTET OG RÅDET EUROPA- KOMMISSIONEN Bruxelles, den 28.2.2017 COM(2017) 99 final ANNEXES 1 to 4 BILAG til RAPPORT FRA KOMMISSIONEN TIL EUROPA-PARLAMENTET OG RÅDET om nes anvendelse af Europa-Parlamentets og Rådets direktiv

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

02101 Indledende Programmering Introduktion til Eclipse

02101 Indledende Programmering Introduktion til Eclipse 02101 Indledende Programmering Introduktion til Eclipse Version 2018 1 Introduktion I dette kursus lægger vi op til at man bruger det integrerede udviklingsmiljø Eclipse. Basalt set er et integreret udviklingsmiljø

Læs mere

Java web applikationer med Tomcat

Java web applikationer med Tomcat Denne guide er oprindeligt udgivet på Eksperten.dk Java web applikationer med Tomcat Denne artikel beskriver hvordan man kan konfigurere container managed security og en database connection pool i Tomcat.

Læs mere

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 7 DM -. Obligatoriske Opgave Løsning af ligningssystem vha. fipunktmetoden Jacob Christiansen, 8 moffe@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense. Opgaven Der skal implementeres

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0 Program Dokumentation PC Software Skrevet af Gruppen. Version 1.0 Indholds fortegnelse 1. INDLEDNING...3 1.1. FORMÅL...3 1.2. REFERENCER...3 1.3. VERSIONSHISTORIE...3 1.4. DEFINITIONER...3 1.5. DOKUMENTATIONENS

Læs mere

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter

Læs mere

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Lær Python dag 1 - modul 1

Lær Python dag 1 - modul 1 Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 13 valgfrie emner Evt: Introduktion til J2EE og EJB Hvordan definere egne generics Evt.: Værktøjer til forbedring af kodekvalitet kodemetrikker og audit Projektvejledning

Læs mere

Aftenskole i programmering sæson Core Data del 2. Sæson 2-13

Aftenskole i programmering sæson Core Data del 2. Sæson 2-13 Core Data del 2 Sæson 2-13 Sidste uge I sidste uge lavede vi en ny simpel app til brug for at lære Core Data Vi brugte kun elementer i har lært så i burde kunne lave den selv og skulle også helst lave

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Bilagsrapport til specialet Flash-light

Bilagsrapport til specialet Flash-light Bilagsrapport til specialet Flash-light Af Filip Nicolaisen og Kasper Storm Afleveret Maj 2006 Vejledere: Mads Rosendahl (Datalogi) Bjørn Laursen (Kommunikation) Indholdsfortegnelse - Bilag Bilag 1. 1

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

Programmering C RTG - 3.3 09-02-2015

Programmering C RTG - 3.3 09-02-2015 Indholdsfortegnelse Formål... 2 Opgave formulering... 2 Krav til dokumentation af programmer... 3 ASCII tabel... 4 Værktøjer... 5 Versioner af ASCII tabel... 6 v1.9... 6 Problemer og mangler... 6 v2.1...

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

Hvorfor skal vi bruge objekt orienteret databaser?

Hvorfor skal vi bruge objekt orienteret databaser? OODBMS Vs. RDBMS 1 Indholdsfortegnelse Hvorfor skal vi bruge objekt orienteret databaser?... 3 OODBMS i erhvervslivet... 4 Bagsiden af medaljen... 5 OODBMS i praksis... 6 Konklusion... 8 2 Hvorfor skal

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

Web- og serverprogrammering

Web- og serverprogrammering Web- og serverprogrammering Introduktion til web- og serverprogrammering - dag 1 Overblik over WSP, eller: de 3+x sprog i webprogrammering (HTML, CSS, JavaScript, plus x serverside-sprog) Installation

Læs mere

KIH Database. Systemdokumentation for KIH Databasen. 1. maj 2013. Side 1 af 13

KIH Database. Systemdokumentation for KIH Databasen. 1. maj 2013. Side 1 af 13 KIH Database Systemdokumentation for KIH Databasen 1. maj 2013 Side 1 af 13 Indholdsfortegnelse Indholdsfortegnelse... 2 Indledning... 3 Systemoverblik... 3 KIH Database applikationsserver... 5 Forudsætninger

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

Vejledning til Teknisk opsætning

Vejledning til Teknisk opsætning Vejledning til Teknisk opsætning v. 1.0 Adm4you, 2010. Indhold Kort om denne vejledning... 3 Generelt om easyourtime... 3 Installation af databasen... 3 Sikkerhed og rettigheder... 4 SQL Login... 4 Rettigheder

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere