En kort introduktion til JDBC

Størrelse: px
Starte visningen fra side:

Download "En kort introduktion til JDBC"

Transkript

1 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 database eller en bestemt måde at kommunikere med databasen på. Det er opbygget af en række forskellige klasser og interfaces der beskriver de mulige handlinger, men ikke hvordan disse skal implementeres. Det er database producenten der fylder denne del ud. Oracles JDBC-biblioteker Det første man skal være i besiddelse af for benytte JDBC er et bibliotek der understøtter den database man gerne vil kommunikere med. For Oracle er det bibliotekerne classes111.zip eller classes12.zip man skal bruge. Den første hvis man benytter JDK 1.1.X og den anden for JDK eller højere. For at kunne benytte dette bibliotek i forbindelse med kompilering og afvikling af Java programmer skal Java vide hvor de fysisk befinder sig på den maskine der skal kompilere eller afvikle Java. Der er to forskellige muligheder for at gøre dette, enten ved at give kompileren og den virtuelle maskine informationen med i kommandolinien eller ved at tilføje informationen til maskinens miljø(environment). Lad os antage at Oracle er installeret i biblioteket C:\Oracle på Windows eller /oracle på UNIX/Linux. Så vil JDBC bibliotekerne befinde sig hhv. i C:\Oracle\jdbc\lib eller /oracle/jdbc/lib. Der er dog ikke noget krav til at bibliotekerne skal befinde sig et specielt sted. Kompilering af en Java-fil med navnet Test.java vil kunne udføres med følgende kommando: javac -classpath "c:\oracle\jdbc\lib\classes12.zip" Test.java og afviklingen af programmet med java cp ".;C:\Oracle\jdbc\lib\classes12.zip" Test Den skarpe iagttager vil her bemærke at de to henvisninger til biblioteket ikke er identiske. Ved kompilering er den "c:\oracle\jdbc\lib\classes12.zip" mens den ved afviklingen er ".;C:\Oracle\jdbc\lib\classes12.zip" 1 Jeg har bemærket at min version af Oracle for Linux (version 8.1.7) kun har biblioteket classes111.zip. Dette kan godt benyttes sammen med JDK 1.2 el. 1.3.

2 Der er tilføjet et punktum efterfulgt af et semikolon. Semikolonet er et skilletegn der benyttes til at adskille flere samtidige henvisninger og punktummet referere til det katalog man står i. Tilføjes dette ikke vil man få følgende fejl java -cp "c:\oracle\jdbc\lib\classes12.zip" Test Exception in thread "main" java.lang.noclassdeffounderror: Test der betyder at Java ikke finde klassen Test.class, selvom den ligger i det bibliotek Java afvikles fra. Dette er et lidt ufrostårlig resultat af at tilføje biblioteker til kommandolinien, men det opstår fordi en tildeling i kommandolinien har højere prioritet end alle andre henvisninger, bortset fra Javas egne biblioteker. Det gælder altså også det aktive bibliotek. Den anden mulighed er at tilføje biblioteket via miljøvariabler enten permanent ved opstarten at computeren eller sessionen eller lokalt i den enkelte session. På Windows gøres dette med kommandoen set set CLASSPATH=c:\oracle\jdbc\lib\classes12.zip eller i UNIX/Linux med kommandoen export export CLASSPATH=/oracle/jdbc/lib/classes12.zip Herefter kan kompilering og afvikling foretages med kommandoerne javac Test.java og afviklingen af programmet med java Test Exception in thread "main" java.lang.noclassdeffounderror: test nej, samme fejl igen, så det skal altså være set CLASSPATH=.;c:\oracle\jdbc\lib\classes12.zip under Windows eller export CLASSPATH=.;/oracle/jdbc/lib/classes12.zip på UNIX/Linux. Hvis man ønsker at opsætte sin maskine så dette gøres automatisk ved opstarten eller ved starten af en session skal dette gøres på følgende måder(i eksemplerne antages det stadig at Oracle er installeret i c:\oracle på Windows eller /oracle på UNIX/Linux): Windows 95/98: indsæt linien set CLASSPATH=.;c:\oracle\jdbc\lib\classes12.zip i autoexec.bat og genstart maskinen.

3 Windows NT/2000: Højreklik på My computer og vælg properties. I den dialog der fremkommer vælges Advanced og Environment Variables. Hvis man er administrator kan man indsætte en CLASSPATH som system variable (som gælder for alle) ellers vælges User variables for.. Klik på New og skrive CLASSPATH som Variable Name og.;c:\oracle\jdbc\lib\classes12.zip som Variable Value 2. Klik Ok for at lukke indtastningsdialogen og Ok for at lukke Environment Variables -dialogen og Ok for at lukke System Properties. For at det virker er det nødvendigt at genstarte de programmer der skal benytte informatinen, f.eks. Ultraedit eller en kommandoprompt. UNIX/Linux: Åben filen.bashrc (hvis du bruger bash, find selv ud af hvilke opstartsfiler andre shells benytter) i dit hjemmekatalog og indsæt følgende i enden af denne export CLASSPATH=.:/Oracle/jdbc/lib/classes12.zip:$CLASSPATH (læg mærke til at der refereres til CLASSPATH til sidst for at sikre at hvis der allerede er tilføjet noget til CLASSPATH så overskrives dette ikke. Det samme kan gøres under Windows). Herefter skal forbindelse til maskinen genetableres for at få indlæst informationerne i.bashrc. Hvad skal man vide om databaseserveren? For at kunne etablere forbindelsen til databaseserveren er det nødvendig at vide forskellige ting. Først er det naturligvis nødvendigt at vide hvilken maskine database afvikles på. For studerende på datalogi på RUC er det en maskine der hedder isl.ruc.dk ( ). Dernæst skal man vide på hvilken port databasen lytter efter forbindelser. Default er det post 1521 der benyttes, og det er det også på isl.ruc.dk. Det sidste man skal vide om databaseserveren er navnet på databasen, det såkaldte database SID. På isl.ruc.dk er datalogi. Dette var information om selve databasen og den maskine den afvikles på. Herudover skal man forbinde til en bruger, og skal derfor kende brugernavn og adgangskode. Brugernavne og adgangskoder i databasen har ikke noget at gøre med de brugernavne og adgangskoder man bruger for at logge på Windows, Unix og Novell. Afslutningsvis en lille opsummering over hvad man skal vide for at forbinde til en database via JDBC. maskinnavnet på den maskine databasen afvikles på den port databasen bruger til at lytte efter forbindelser navnet på databasen, det såkaldte database SID et databasebrugernavn en adgangskode for dette brugernavn På datalogi er det følgende informationer for studerende (med eksempelbrugeren SPJ fra databasekurset) 2 Hvis der allerede findes en CLASSPATH tilføjes stien til Oracles biblioteker blot med semikolon som skilletegn. F.eks. /lib/et_andet_program.jar;c:\oracle\jdbc\lib\classes12.zip

4 maskinnavn: isl.ruc.dk ( ) port: 1521 database SID: datalogi databasebruger: spj adgangskode: spj JDBC Connection Nu til det der er det interessante, nemlig forbindelsen til Oracle via JDBC. For at benytte JDBC bibliotekerne er det nødvendigt at importere biblioteket i programmet. Dette gøres med erklæringen import java.sql.*; Det næste der skal ske er at fortælle Java hvor den specifikke implementering for Oracle findes, dette gøres med følgende erklæring Class.forName("oracle.jdbc.driver.OracleDriver"); Dette skal, i vanlig Java stil, foregå i en try-catch blok //Vi skal bruge Connection objected senere så vi erklærer det // udenfor try-catch blokken Connection conn = null; // registrer Oracle driveren Class.forName("oracle.jdbc.driver.OracleDriver"); // etabler forbindelsen conn = DriverManager.getConnection( "jdbc:oracle:thin:@isl.ruc.dk:1521:datalogi", "spj", "spj"); catch(classnotfoundexception e) { System.out.println("Ups, kunne ikke finde Oracles biblioteker!!! "); System.exit(-1); catch(sqlexception e) { // Oracle fejl // Udskriv en fejlbesked ala Oracle System.out.println( "ORA-" + e.geterrorcode() + ": " + e.getmessage()); // Afbryd programafviklingen System.exit(-1); Det var det hele. Nu er der etableret en forbindelse til databasen datalogi på isl.ruc.dk til brugeren SPJ.

5 JDBC Statement og ResultSet Nu har vi SPJ i vores hule JDBC-hånd og kan begynde at gøre noget. Lad os, for ikke at blive alt for kåde, lave en simpel SQL forespørgsel SELECT sno from SPJ; I JDBC oprettes der først et statement objekt, som hentes fra Connection objektet med funktionskaldet Statement stmt = conn.createstatement(); dernæst eksekveres forespørgslen og et ResultSet-objekt returneres med funktionskaldet ResultSet rset = stmt.executequery("select sno FROM SPJ"); 3 nu har vi resultatet i et ResultSet object og kan manipulere med det. En oplagt begyndelse er at skrive det ud while (rset.next ()) System.out.println(rset.getString("SNO")); Det skal naturligvis også afvikles i en try-catch blok Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery("select sno FROM SPJ"); while (rset.next ()) System.out.println(rset.getString("SNO"); catch(sqlexception e) { // fejlhåndtering Det første JDBC program Det første JDBC program, lige til at klippe ud og prøve. import java.util.*; import java.io.*; import java.sql.*; class Test { 3 BEMÆRK!!! der SKAL ikke noget semikolon efter SQL-forespørgslen.

6 public static void main(string[] args) { Connection conn = null; Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@isl.ruc.dk:1521:datalogi", "spj", "spj"); catch(classnotfoundexception e) { System.out.println( "Ups, kunne ikke finde Oracles biblioteker!!! "); System.exit(-1); catch(sqlexception e) { System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); System.exit(-1); System.out.println( Connected!!! ); Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery("select sno FROM SPJ"); while (rset.next ()) System.out.println(rset.getString("SNO")); catch(sqlexception e) { System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage());

7 SPJ databaseapplikation Nu ved vi hvordan det skal gøres, så lad os stille lidt større krav, end blot at kunne forbinde og hente nogle værdier i en tabel. Nu skal vi designe en databaseapplikation der kan finde og vise information fra SPJ tabellerne. Input til applikationen skal være et navn og output en række informationer om denne person. Lad os konstruere applikationen således at den starter op og beder om et navn, viser informationerne og beder om et nyt navn, indtil vi taster exit. Da vi måske ikke kan huske hvilke navne der er i SPJ tilføjer vi kommandoen list der viser alle navne i SPJ. Forbindelsen til databasen er det samme som i vores første program, vi udvider den blot lidt ved at lave en funktion der klare det hele. public boolean connecttodatabase(string user, String password, String server, String port, String SID) Funktionen returnere sandt eller falsk alt efter om det lykkedes at oprette forbindelsen. public boolean connecttodatabase(string user, String password, String server, String port, String SID) { // registrer Oracle driveren Class.forName("oracle.jdbc.driver.OracleDriver"); // etabler forbindelsen conn = DriverManager.getConnection( "jdbc:oracle:thin:@"+server+":"+port+":"+sid, user, password); catch(classnotfoundexception e) { System.out.println( "Ups, kunne ikke finde Oracles biblioteker!!! "); System.exit(-1); catch(sqlexception e) { // Hvis der opfanges en exception har vi ikke fået forbindelse System.out.println("Error: no connection to database"); // Udskriv en fejlbesked ala Oracle System.out.println( "ORA-" + e.geterrorcode() + ": " + e.getmessage()); // returner falsk return false; // hvis vi kommer hertil gik alting godt woooow return true; En anden nyttig hjælpefunktion læser en linie input fra stdin String getinput() {

8 // Opret en bufferedreader der læser en linie fra System.in BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); // Returner linien return d.readline(); catch(ioexception e) { // Udskriv exception informationer System.out.println(e.toString()); // Uuuppps, noget gik galt!!! return new String(""); Nu skal vi bare lave en funktion der looper indtil vi giver den kommandoen exit public void commandloop() Det første der sker i denne funktion er at vi laver løkken while(true) { hvori alt skal foregå. Vi starter med at skrive hvilke muligheder der er System.out.print("Indtast navn, \"list\" for en liste af mulige navne eller \"exit\" for at afslutte.\n> "); Der er altså tre forskellig muligheder. Enten er det kommandoen list eller exit eller også er det et navn. Vi begynder med at vente på input fra brugeren String name = getinput(); herefter er det naturligt først at tjekke om applikationen skal afsluttes if(name.tolowercase().equals("exit")) break; // afbryd den uendelige løkke hvis ikke det var et exit så kan det være et list else if(name.tolowercase().equals("list")) { String sql = "select sname from s order by 1"; // opret et statement Statement stmt = conn.createstatement(); // få et resultset fra statement udfra den givne kommando ResultSet rset = stmt.executequery(sql); while (rset.next ()) { String data = rset.getstring(1); // udskriv data System.out.println(data); catch(sqlexception e) {

9 // hvis kommandoen ikke kunne udføres, så udskriv en fejlbesked System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); Her er der ikke rigtigt noget nyt, vi udskriver blot attributten fra en tabel. Sidste mulighed er lidt mere krævende. Vi kunne naturligvis blot hælde informationerne ud i hovedet på brugeren i et eller andet tilfældigt format, men nej, vi vil gerne lave en brugervenlig databaseapplikation. Målet er at lave et output som i SQLPlus Kolonne1 Kolonne2 Kolonne3 Kolonne data1 data2 data3 data4 hvor hver kolonne har en fast bredde og rækkerne vises formateret i forhold til kolonnerne. For at kunne dette er det nødvendigt at kende antallet af kolonner og deres bredde. Hvis vi vælger at forespørgslen for et givet navn er følgende String sql = "select SNAME, JNAME, J.CITY, PNAME, COLOR, WEIGHT, P.CITY " + "from SPJ, S, P, J " + "WHERE SPJ.SNO = S.SNO " + "AND SPJ.PNO = P.PNO " + "AND SPJ.JNO = J.JNO " + "AND SPJ.SNO = S.SNO " + "AND lower(sname) = lower('" + name + "')"; så ved vi at der er 7 kolonner i svaret og vi kan finde de enkelte kolonners bredde ved at undersøge de tabeller de kommer fra, f.eks. vil en DESCRIBE af tabellen S i SQLPlus vise følgende SQL> describe s Navn NULL? Type SNO NOT NULL CHAR(3) SNAME CHAR(7) STATUS NUMBER(38) CITY CHAR(8) hvor vi kan se at SNAME maksimalt kan være 7 tegn, etc. Denne metode er meget omstædigt og specifikt for den enkelte forespørgsel. Bestemmer man sig for at ændre i forespørgslen vil alt det man har lavet muligvis skulle laves om. Derfor vil vi gerne opfinde en mere generel løsning. Heldigvis er der i JDBC indført funktionalitet der kan udtrække metainformation om den enkelte forespørgsel. Dette gøres ved at oprette et ResultSetMetaData-objekt fra det ResultSet-objekt vi får tilbage når vi eksekver forespørgslen. Forløbet vil se således ud Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery(sql); ResultSetMetaData meta = rset.getmetadata(); Vi kan så begynde med at finde ud af hvor mange kolonner der er i svaret

10 int cols = meta.getcolumncount(); hvilket jo skal være 7 for denne forespørgsel. Vores udskrivning er liniebaseret, hvilket betyder at vi skal producere vores output linie for linie. Den første linie i output skal være en linie med kolonnenavnene placeret i forhold til den bredde kolonnerne har SNAME JNAME CITY PNAME COLOR WEIGHT CITY Vi har derfor brug for viden om kolonnebredden og opretter et array der kan holde denne viden fordi den skal bruges senere int size[] = new int[cols]; herefter er det blot en for-løkke der udskriver kolonnenavnene i forhold til deres bredde. Det første vi gør er at indsætte kolonnebredden i vore array size[i] = meta.getcolumndisplaysize(i+1); herefter udskrives kolonnenavnet String label = meta.getcolumnlabel(i+1); // skriv navnet ud (NB: uden linieskift) System.out.print(label); hvis kolonnenavnet har færre tegn end kolonnebredden så må vi fylde ud med nogle mellemrum for(int j = 0; j < size[i]-label.length(); j++) og derefter huske at lave et mellemrum mellem kolonnerne. For-løkken ser således ud i sin helhed // løb gennem alle kolonner for(int i = 0; i < cols; i++) { // først gem den displaysize der findes om kolonnen size[i] = meta.getcolumndisplaysize(i+1); // Hent kolonnens navn String label = meta.getcolumnlabel(i+1); // skriv navnet ud (NB: uden linieskift) System.out.print(label); // Hvis displaysize er større end kolonnenavnet // så udskriv nogle mellemrum // så det næste navn kommer til at stå det rigtige sted for(int j = 0; j < size[i]-label.length(); j++) // Lav et mellemrum mellem kolonnerne

11 Dernæst skal der udskrives en stiplet linie uden alle kolonnenavnene, hvilket gøres ved først at udskrive et linieskift og så løbe arrayet med kolonnebredder igennem og udskrive et passende antal streger for hver kolonne for(int i = 0; i < cols; i++) { for(int j = 0; j < size[i]; j++) System.out.print("-"); SNAME JNAME CITY PNAME COLOR WEIGHT CITY Så mangler vi bare at udskrive rækkerne i svaret. Vi vil gerne kunne udskrive hvor mange rækker der udskrives i alt så derfor opretter vi en variabel til at tælle rækkerne int rows = 0; herefter hentes rækkerne en af gangen som vi kender det while(rset.next ()) { // udskriv række for hver række udskrives data i de enkelte kolonner og der fyldes ud med mellemrum hvis indholdet i kolonnen ikke fylder hele kolonnebredden. Når alle data i kolonnerne er udskrevet udskrives et linieskift og rækketælleren tælles op med 1. for(int i = 0; i < cols; i++) { // Hent data som en streng String data = rset.getstring(i+1); // udskriv data System.out.print(data); // fyld ud med mellemrum hvis data ikke fylder hele kolonnebreden for(int j = 0; j < size[i]-data.length(); j++) // mellemrum mellem kolonnerne // linieskift mellem rækkerne rows++; Til allersidst udskrives antallet af valgte rækker System.out.println("\n" + rows + " rækker er valgt.\n"); Nu ser vores output ud som vi gene vil have det SNAME JNAME CITY PNAME COLOR WEIGHT CITY Blake Sorter Paris Screw Blue 17 Rome

12 Blake Punch Rome Screw Red 14 London 2 rækker er valgt. SQLPlus databaseapplikation Det sidste eksempel er en lille letvægtsudgave af SQLPlus der viser at man også kan håndtere dynamisk SQL via JDBC. En dynamisk SQL-forespørgsel er en forespørgsel hvor vi ikke på forhånd ved noget om hvordan svaret ser ud. Denne applikation er også et eksempel på at man ved at tænke sig om under udviklingen af applikationer kan spare tid næste gang man stå med et lignende problem. Flere at de ændringer der blev indført i SPJ-applikationen kan genbruges i denne applikation. Det første problem der skal løses er at man ved opstarten af denne SQLPlus-applikation skal have mulighed for at vælge hvilken database man ønsker at arbejde med. For at skabe forbindelse via JDBC er det nødvendig at give følgende informationer databaseserveren porten der lyttes på database SID brugernavn adgangskode Tidligere indførte vi et funktionskald der håndterede login med netop disse informationer som parametre og vi kan derfor genbruge denne. Vi skal blot bede om informationerne hos brugeren i stedet for at hardcode dem ind i programmet. // database server navn System.out.print("Database server: "); String server = getinput(); // TNS port System.out.print("Port: "); String port = getinput(); // database SID System.out.print("Database SID: "); String SID = getinput(); // user System.out.print("User: "); String user = getinput(); // password System.out.print("Password: "); String password = getinput(); // etabler forbindelsen til databasen if(connecttodatabase(user, password, server, port, SID) == false) {

13 System.out.println( "Kunne ikke etablere forbindelse til databasen!!!"); System.exit(-1); // afslut hvis det ikke lykkedes Vi beder om informationerne én af gangen og forsøger så at etablere forbindelsen 4. Lykkedes dette ikke afsluttes programmet. Det første vi gør er lige at udskrive lidt information om den databaseserver vi er forbundet til. Dette gøres ved at oprette et DatabaseMetaData-objekt og udskrive databasens versionsnummer // Her hentes metainformationer fra forbindelsen DatabaseMetaData meta = conn.getmetadata(); System.out.println("Forbindelse er oprettet til :\n"); // Lad os udskrive noget a la den ægte "SQLPlus" System.out.println(meta.getDatabaseProductVersion()); Herefter skal brugerne præsenteres for en SQL-prompt, hvor det er muligt at indtaste SQL. Denne version er begrænset til kun at acceptere en linie SQL, hvilket betyder at applikationen forsøger at afvikle forespørgslen når der tastes enter. Vi skal som i forgående applikation ind i en uendelig løkke der fortolker input fra brugeren. Der er to muligheder enten er det et exit eller også er det en forespørgsel. Dvs. alt der ikke er strengen exit fortolkes som SQL. public void commandloop() { while(true) { // loop i al evighed // Lav en pæn prompt System.out.print("SQL> "); // Hent en linie fra brugeren String cmd = getinput(); if(cmd.charat(cmd.length()-1) == ';') cmd = cmd.substring(0, cmd.length()-1); // har vi et farvel???? så afslut loopet if(cmd.tolowercase().equals("exit")) break; else // behandl kommandoen HandleCommand(cmd); Det væsentlige i denne funktion er at udskrive SQL-prompten og vente på input fra brugeren. Herefter at fjerne et eventuelt semikolon i enden, fordi det giver en fejl, tjekke om det er strengen exit eller kalde en funktion der håndtere SQL fortolkningen. Vi har tidligere lavet en generel udskrivning af resultatet af en forespørgsel, så funktionskaldet HandleCommand er blot en gentagelse af dette. Der er naturligvis en lang række funktioner og problemer der ikke håndteres af denne letvægtsudgave af SPLPlus, men formålet var også blot at vise at man med JDBC er i stand til at konstruere temmelig komplekse databaseapplikationer med en forholdsvist simpel grænseflade til databasen. 4 Bemærk at vi også genbruger funktionen getinput() til at hente input fra brugeren.

14 Afrunding JDBC er generelt og derfor ikke afhængig af hvilken database der forbindes til. Erstattes de to første linier Class.forName("oracle.jdbc.driver.OracleDriver"); // etabler forbindelsen conn = DriverManager.getConnection( "jdbc:oracle:thin:@"+server+":"+port+":"+sid, user, password); vil resten af koden kunne benyttes på en anden database 5. JDBC er veldokumenteret og der er mange eksempler at hente ude omkring i verden, hvis der er noget man er i tvivl om. Den generelle dokumentation findes i dokumentationen til JDK 6. Herudover findes der en JDBC-tutorial på som er et oplagt sted at begynde. Et vigtigt hint i forbindelse med udviklingen af databaseapplikationer er hvordan man fejlfinder når koden pludselig indeholder 2 sprog. Fejl kan opstå både i Java og i SQL eller i begge, og det er ofte svært at afgøre om det er den ene eller anden del af programmet der fejler. Hvis der opstår problemer omkring Java-SQL integrationen er det en rigtig god ide at udskrive de SQL-statements der skal afvikles og prøve at køre dem i SQLPlus (den ægte ). Dels er man sikker på at det så ikke er her fejlen opstår, og dels er der ofte mere information om fejlen (der refereres til hvor i udtrykket fejlen er opstået). På denne måde kan man fokusere på de enkelt dele af applikationen for sig og derfor ikke komme til at lede efter noget i den ene del som i virkeligheden skyldes den anden. (Her tales med bitter erfaring) 5 Hvis man vil lave programmer der er fuldstændig kompatible mellem alle database bør man frekventere beskrivelsen af JDBC på hvor det defineres hvilke funktionskald der skal implementeres og hvilke man kan undlade som driver-udvikler. 6

15 Kildekode SPJ-applikationen import java.util.*; // string, etc. import java.io.*; // input, output import java.sql.*; // sql tingene class SPJ { Connection conn; public SPJ() { // etabler forbindelsen til databasen if(connecttodatabase("spj", "spj", "isl.ruc.dk", "1521", "datalogi") == false) { System.out.println("Kunne ikke etablere forbindelse til databasen!!!"); System.exit(-1); // afslut hvis det ikke lykkedes // start commandloop(); // Funktion der kan modtage input fra brugeren public void commandloop() { while(true) { // loop i al evighed // Lav en pæn prompt System.out.print("Indtast navn, \"list\" for en liste af mulige navne " + " eller \"exit\" for at afslutte.\n> "); // Hent en linie fra brugeren String name = getinput(); // afslut programmet hvis dre tastes "exit" if(name.tolowercase().equals("exit")) break; // udskriv en liste af navne i s else if(name.tolowercase().equals("list")) { String sql = "select sname from s order by 1"; // opret et statement Statement stmt = conn.createstatement(); // få et resultset fra statement udfra den givne kommando ResultSet rset = stmt.executequery(sql); while (rset.next ()) { String data = rset.getstring(1); // udskriv data System.out.println(data); catch(sqlexception e) { // hvis kommandoen ikke kunne udføres, så udskriv en fejlbesked System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); // find informationer om personen else { // Først finde vi lige String sql = "select SNAME, JNAME, J.CITY, PNAME, COLOR, WEIGHT, P.CITY " + "from SPJ, S, P, J " + "WHERE SPJ.SNO = S.SNO " + "AND SPJ.PNO = P.PNO " + "AND SPJ.JNO = J.JNO " + "AND SPJ.SNO = S.SNO " + "AND lower(sname) = lower('" + name + "')"; // opret et statement Statement stmt = conn.createstatement(); // få et resultset fra statement udfra den givne kommando

16 ResultSet rset = stmt.executequery(sql); // information om forespørgslen som vi senere bruger til at formatere output ResultSetMetaData meta = rset.getmetadata(); // hvis der er noget at skrive ud, så gør det pænt if(rset.next ()) { // natallet af kolonner i svaret. Vi kender naturligvis godt dette antal, men // hvis vi ændre i forespørgslen så behøver vi ikke lave om på andet fordi resten // håndteres automatisk int cols = meta.getcolumncount(); // vi opsamler lige den brede kolonnerne har så vi kan lave et rigtigt pænt output int size[] = new int[cols]; // løb gennem alle kolonner for(int i = 0; i < cols; i++) { // først gem den displaysize der findes om kolonnen size[i] = meta.getcolumndisplaysize(i+1); // Hent kolonnens navn String label = meta.getcolumnlabel(i+1); // skriv navnet ud (NB: uden linieskift) System.out.print(label); // Hvis displaysize er større end kolonnenavnet så udskriv nogle mellemrum // så det næste navn kommer til at stå det rigtige sted for(int j = 0; j < size[i]-label.length(); j++) // Lav et mellemrum mellem kolonnerne // det var så kolonnenavnene // her laver vi lige noget lir. // vi udskriver en streg i hele kolonnens brede // KOL1 KOL2 KOL3 // // // // flot ik'?? for(int i = 0; i < cols; i++) { for(int j = 0; j < size[i]; j++) System.out.print("-"); // og så lige en ny linie int rows = 0; do { for(int i = 0; i < cols; i++) { // Hent data som en streng String data = rset.getstring(i+1); // udskriv data System.out.print(data); // fyld ud med mellemrum hvis data ikke fylder hele kolonnebreden for(int j = 0; j < size[i]-data.length(); j++) // mellemrum mellem kolonnerne // linieskift mellem rækkerne rows++; while(rset.next ()); // skriv hvor mange rækker der blev valgt System.out.println("\n" + rows + " rækker er valgt.\n"); else // den person vi søge findes ikke System.out.println("Navnet \"" + name + "\" findes ikke!!!"); catch(sqlexception e) { // hvis kommandoen ikke kunne udføres, så udskriv en fejlbesked System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); // En lille hjælpefunktion der læser en linie fra inputstream

17 String getinput() { // Opret en bufferedreader der læser en linie fra System.in BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); // Returner linien return d.readline(); catch(ioexception e) { // Udskriv exception informationer System.out.println(e.toString()); // Uuuppps, noget gik galt!!! return new String(""); // Funktion der skaber forbindelsen til databasen public boolean connecttodatabase(string user, String password, String server, String port, String SID) { // registrer Oracle driveren Class.forName("oracle.jdbc.driver.OracleDriver"); // etabler forbindelsen conn = DriverManager.getConnection( "jdbc:oracle:thin:@"+server+":"+port+":"+sid, user, password); catch(classnotfoundexception e) { System.out.println("Ups, kunne ikke finde Oracles biblioteker!!! "); System.exit(-1); catch(sqlexception e) { // Hvis der opfanges en exception har vi ikke fået forbindelse System.out.println("Error: no connection to database"); // Udskriv en fejlbesked ala Oracle System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); // returner falsk return false; // hvis vi kommer hertil gik alting godt woooow return true; public static void main(string[] args) { new SPJ(); // Opret et SPJ objekt SQLPLus-applikationen import java.util.*; // string, etc. import java.io.*; // input, output import java.sql.*; // sql tingene // Læg mærke til at der ikke skal refereres til Oracles // JDBC klasser. Det håndteres af DriverManager, derfor stien til // Oracles driver!!! // En lille klasse der er en meget letvægts udgave // af Oracles SQLPlus class SQLPlus { Connection conn; public SQLPlus() { // database server navn System.out.print("Database server: "); String server = getinput();

18 // TNS port System.out.print("Port: "); String port = getinput(); // database SID System.out.print("Database SID: "); String SID = getinput(); // user System.out.print("User: "); String user = getinput(); // password System.out.print("Password: "); String password = getinput(); // etabler forbindelsen til databasen if(connecttodatabase(user, password, server, port, SID) == false) { System.out.println("Kunne ikke etablere forbindelse til databasen!!!"); System.exit(-1); // afslut hvis det ikke lykkedes // Eksempel på hvordan der kan hentes information fra databasen // Her hentes metainformationer fra forbindelsen DatabaseMetaData meta = conn.getmetadata(); System.out.println("Forbindelse er oprettet til :\n"); // Lad os udskrive noget a la den ægte "SQLPlus" System.out.println(meta.getDatabaseProductVersion()); catch(sqlexception e) { System.out.println("Kunne ikke hente database metainformationer!!!!"); // gør klar til at modtage kommandoer fra brugeren commandloop(); // Funktion der skaber forbindelsen til databasen public boolean connecttodatabase(string user, String password, String server, String port, String SID) { // registrer Oracle driveren Class.forName("oracle.jdbc.driver.OracleDriver"); // etabler forbindelsen conn = DriverManager.getConnection( "jdbc:oracle:thin:@"+server+":"+port+":"+sid, user, password); catch(classnotfoundexception e) { System.out.println("Ups, kunne ikke finde Oracles biblioteker!!! "); System.exit(-1); catch(sqlexception e) { // Hvis der opfanges en exception har vi ikke fået forbindelse System.out.println("Error: no connection to database"); // Udskriv en fejlbesked ala Oracle System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); // returner falsk return false; // hvis vi kommer hertil gik alting godt woooow return true; // En lille hjælpefunktion der læser en linie fra inputstream String getinput() { // Opret en bufferedreader der læser en linie fra System.in BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); // Returner linien

19 return d.readline(); catch(ioexception e) { // Udskriv exception informationer System.out.println(e.toString()); // Uuuppps, noget gik galt!!! return new String(""); // Her håndteres alle kommandoer undtagen exit public void HandleCommand(String cmd) { // opret et statement Statement stmt = conn.createstatement(); // få et resultset fra statement udfra den givne kommando ResultSet rset = stmt.executequery(cmd); // Nu er al database aktiviteten afsluttet, dvs. SQL kommandoen er // udført. Tilbage er blot at hente resultatet ud af databasen // da SQL er dynamisk ved vi ikke hvad vi skal skrive ud. Så det må vi // først lige finde ud af??? // Dette gøres ved at hente metadata fra ResultSet der ved noget om kolonnerne. ResultSetMetaData meta = rset.getmetadata(); // lad os lige lave et pænt linieskift så der kommer mellemrum fra // prompten til resultatet // det første vi skal finde ud af er hvor mange kolonner der er i resultatet int cols = meta.getcolumncount(); // vi opsamler lige den brede kolonnerne har så vi kan lave et rigtigt pænt output int size[] = new int[cols]; // løb gennem alle kolonner for(int i = 0; i < cols; i++) { // først gem den displaysize der findes om kolonnen size[i] = meta.getcolumndisplaysize(i+1); // Hent kolonnens navn String label = meta.getcolumnlabel(i+1); // skriv navnet ud (NB: uden linieskift) System.out.print(label); // Hvis displaysize er større end kolonnenavnet så udskriv nogle mellemrum // så det næste navn kommer til at stå det rigtige sted for(int j = 0; j < size[i]-label.length(); j++) // Lav et mellemrum mellem kolonnerne // det var så kolonnenavnene // her laver vi lige noget lir. // vi udskriver en streg i hele kolonnens brede // KOL1 KOL2 KOL3 // // // // flot ik'?? for(int i = 0; i < cols; i++) { for(int j = 0; j < size[i]; j++) System.out.print("-"); // og så lige en ny linie // vi vil gerne kunne fortælle brugeren hvor mange rækker vi har udskrevet int rows = 0; // Hent rækkerne i databasen while (rset.next ()) { for(int i = 0; i < cols; i++) { // Hent data som en streng String data = rset.getstring(i+1); // udskriv data System.out.print(data); // fyld ud med mellemrum hvis data ikke fylder hele kolonnebreden for(int j = 0; j < size[i]-data.length(); j++) // mellemrum mellem kolonnerne

20 // linieskift mellem rækkerne // tæl antallet af rækker 1 op rows++; // skriv hvor mange rækker der blev valgt System.out.println("\n" + rows + " rækker er valgt.\n"); catch(sqlexception e) { // hvis kommandoen ikke kunne udføres, så udskriv en fejlbesked System.out.println("ORA-" + e.geterrorcode() + ": " + e.getmessage()); // Funktion der kan modtage input fra brugeren public void commandloop() { while(true) { // loop i al evighed // Lav en pæn prompt System.out.print("SQL> "); // Hent en linie fra brugeren String cmd = getinput(); // Hvis brugeren har skrevet et ";" til sidst så fjern det!!!! // det giver nemlig problemer, idet der ikke må være ";" i enden af de // sql-statements der sendes til databasen via JDBC. Dette er en klassisk // fejlkilde som adskillige store programmører er faldet i gennem tiderne. // (inkl. undertegnede) if(cmd.charat(cmd.length()-1) == ';') cmd = cmd.substring(0, cmd.length()-1); // har vi et farvel???? så afslut loopet if(cmd.tolowercase().equals("exit")) break; else // behandl kommandoen HandleCommand(cmd); // Det er her det hele begynder... public static void main(string[] args) { // Vi opretter en instans af vores SQLPlus class og // så klare den resten new SQLPlus();

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

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

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

//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

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

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

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

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

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

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

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

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

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

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

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse. Mysqli Webintegrator Når vi arbejder med server-side scripting ( i vort tilfælde PHP), har vi ofte behov for at kunne tilgå data, som vi opbevarer i en database. Det kan f.eks. dreje sig om nyhederne i

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

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

Programmering I Java/C#

Programmering I Java/C# Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren

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

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

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

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

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007 JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal

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

Opdatering af ISOWARE til version 6.1.0

Opdatering af ISOWARE til version 6.1.0 Opdatering af ISOWARE til version 6.1.0 September 2015 Indhold Kontaktoplysninger... 1 VIGTIGT... 2 Opdatering af trejdepartssoftware... 2 Opdatering til version 6.1.0.... 2 1. Backup af databasen... 3

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

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

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

Opret ODBC datakilde Vejledning

Opret ODBC datakilde Vejledning Vejledning V. 1 APRIL 2011 FOR KUNDESERVICE Indholdsfortegnelse 1 Indledning... 3 1.1 Formål... 3 1.2 Målgruppe... 3 1.3 Krav... 3 2 Opret ODBC Datakilde (Open Database Connectivity)... 3 2.1 Forbindelse

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

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

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

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

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

PHP Snippets. De små korte. Skrevet af Daniel Pedersen PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk

Læs mere

Opsætning af MobilePBX med Kalenderdatabase

Opsætning af MobilePBX med Kalenderdatabase Opsætning af MobilePBX med Kalenderdatabase Dette dokument beskriver hvorledes der installeres Symprex Exchange Connector og SQL Server Express for at MobilePBX kan benytte kalenderadadgang via database

Læs mere

Ruko SmartAir. Updater installation

Ruko SmartAir. Updater installation Ruko SmartAir Updater installation Introduktion. Updateren er en speciel enhed som giver os mulighed for at tilføje, læse og skrive funktioner i en offline installation. Med læse og skrive funktionen kan

Læs mere

Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1

Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1 Installationsguide til Oracle Database XE 10.2 og APEX 3.1.1 Oracle Database Express Edition (XE) er Oracles lille gratis database tilsvarende Microsofts SQL Server Express Edition. Oracle Database XE

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

Installation af Elektronisk APV på flere PC er

Installation af Elektronisk APV på flere PC er Installation af Elektronisk APV på flere PC er Vejledning til installation af Elektronisk APV, når programmet skal installeres på flere PC er, der kobler sig op på en fælles server. 1 Installation af Elektronisk

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

Vejledning. Opsætning af Trio Web Vers 2.0 feb. 2010

Vejledning. Opsætning af Trio Web Vers 2.0 feb. 2010 Opsætning af Trio Web Vers 2.0 feb. 2010 Indholdsfortegnelse Opsætning af Trio Web... 3 Generel opsætning af Trio Web... 3 Databaseopsætning... 3 DB... 3 Aar... 4 Login... 4 Internet... 4 Port... 4 Registreringsnøgle...

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

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

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

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

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

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning Institut for Matematik og Datalogi Syddansk Universitet, Odense 21. februar 2011 LMF DM507 Eksamen Obligatorisk Opgave Rejseplanlægning 1 Problemet Denne opgave går ud på at lave et program, som ud fra

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Opdatering af ISOWARE til version 8.0.0

Opdatering af ISOWARE til version 8.0.0 Opdatering af ISOWARE til version 8.0.0 Indhold Kontaktoplysninger... 1 VIGTIGT... 2 Opdatering af trejdepartssoftware... 2 Opdatering til version 8.0.0.... 2 1. Backup af databasen... 3 2. Installation

Læs mere

Opsætning af Oracle Designer 10g repositorie

Opsætning af Oracle Designer 10g repositorie Opsætning af Oracle Designer 10g repositorie Dette dokument beskriver hvordan man opsætter det repositorie, som Oracle Designer gemmer sine data i. Udgangspunktet er at man har installeret Oracle Database

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

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

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

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

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

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

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

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

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

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

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

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

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Skriftlig opgave. Designtanker i database-nære systemer

Skriftlig opgave. Designtanker i database-nære systemer Skriftlig opgave til eksamen for faget»databaser«designtanker i database-nære systemer Martin Ancher Holm Juni 2010 1 Intro Denne skriftlige opgave indeholder kort de daglige tanker jeg har omkring design

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

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner Java Programmering En bog for begyndere Skrevet af Henrik Kressner Indholdsfortegnelse Introduktion...3 1 Introduktion til Java...4 1.1 Javakoden...4 1.2 Det første program...6 1.2 Skriv til skærmen...6

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

FleeDa (DBK Fleetmap Database) Installationsvejledning til installation af VPN og FleeDa klient på egen PC (Juli 2017)

FleeDa (DBK Fleetmap Database) Installationsvejledning til installation af VPN og FleeDa klient på egen PC (Juli 2017) FleeDa (DBK Fleetmap Database) Installationsvejledning til installation af VPN og FleeDa klient på egen PC (Juli 2017) Page 1 of 12 Indhold 1 Adgang til FleeDa... 3 1.1 HW og SW forudsætninger... 3 1.2

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

Administrator - installation og brug i Windows

Administrator - installation og brug i Windows 1 Administrator - installation og brug i Windows Grundforfattet af Allan, OZ1DIS, redigeret/udgivet af Palle, OZ6YM Det her beskrevne er IKKE noget nyt, og har været gældende siden Windows NT og version

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

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

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

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

Opsætning af udviklerversion af Microsofts open source XDS.b fra Codeplex Projekt: Net4Care Version: V0.1, 2012-06-12

Opsætning af udviklerversion af Microsofts open source XDS.b fra Codeplex Projekt: Net4Care Version: V0.1, 2012-06-12 XDS Konfigurationsvejledning Opsætning af udviklerversion af Microsofts open source XDS.b fra Codeplex Projekt: Net4Care Version: V0.1, 2012-06-12 Indholdsfortegnelse Indledning... 2 Miljø... 2 Opsætning

Læs mere

3. Menuen Start -> Programs -> OpenVPN åbnes, og "My Certificate Wizard" vælges:

3. Menuen Start -> Programs -> OpenVPN åbnes, og My Certificate Wizard vælges: Opsætning af VPN forbindelse til DRC En VPN forbindelse gør det muligt for en hjemmecomputer, eller en bærbar computer, at få adgang til DRCs interne lokalnet fra en vilkårlig internetforbindelse. Forudsætninger

Læs mere

TimePlan version 6.0 - Installationsvejledning

TimePlan version 6.0 - Installationsvejledning TimePlan version 6.0 - Installationsvejledning For opgradering af tidligere TimePlan versioner anvendes opdateringsprogrammet: TimePlan 6 Wizard.exe. Programmet kan afvikles på dansk eller engelsk. Opdateringsprogrammet

Læs mere

Administrator - installation og brug i Windows

Administrator - installation og brug i Windows 1 Administrator - installation og brug i Windows Det her beskrevne er IKKE noget nyt, og har været gældende siden Windows NT og version 2000, efterhånden 15-20 år eller mere. Denne artikel omhandler følgende

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

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

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

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

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

OpenTele datamonitoreringsplatform

OpenTele datamonitoreringsplatform OpenTele datamonitoreringsplatform Systemdokumentation for OpenTele server- og klient 1. maj 2013 Side 1 af 13 Indholdsfortegnelse Indholdsfortegnelse... 2 Indledning... 3 Systemoverblik... 3 OpenTele

Læs mere

Hent filoplysninger fra billeder og filer

Hent filoplysninger fra billeder og filer Hent filoplysninger fra billeder og filer I denne vejledning bliver det gennemgået, hvordan man via Power Forespørgsel kan hente filoplysninger fra en mappe ind i Excel. Der skal opbygges følgende elementer:

Læs mere

HELLO INSTALLATIONS GUIDE - DANSK RACKPEOPLE

HELLO INSTALLATIONS GUIDE - DANSK RACKPEOPLE HELLO INSTALLATIONS GUIDE - DANSK RACKPEOPLE 1 Tekniske Krav 1.1 Hardware krav: En skærm gerne med touch Hvis skærmen ikke har touch, skal du bruge et tastatur og en mus Webcam Gerne i HD En ekstern lydenhed

Læs mere

Brugermanual PoP3 og Outlook Office 2003 Webmail www.321mail.dk. Udarbejdet af IT-afdelingen 2005

Brugermanual PoP3 og Outlook Office 2003 Webmail www.321mail.dk. Udarbejdet af IT-afdelingen 2005 Brugermanual PoP3 og Outlook Office 2003 Webmail www.321mail.dk Udarbejdet af IT-afdelingen 2005 Indholdsfortegnelse 1. INDLEDNING... 4 2. OUTLOOK 2003... 4 3. BRUGERVEJLEDNING I BRUGEN AF WEB MAIL...

Læs mere

Tilslutning med Cisco AnyConnect VPN-klient (Windows) til AARHUS TECH P-net

Tilslutning med Cisco AnyConnect VPN-klient (Windows) til AARHUS TECH P-net 18. november 2011 Vejledning Windows 7 - eklient Opkobling via ADSL eller anden kabelforbindelse til P-net. Tilslutning med Cisco AnyConnect VPN-klient (Windows) til AARHUS TECH P-net Cisco AnyConnect

Læs mere

Installation af en virtuel maskine

Installation af en virtuel maskine Installation af en virtuel maskine Hvad er en virtuel maskine? Du skal se en virtuel maskine som en ekstra computer, som kører inde i maven på din computer. Det vil sige du kan have en windows computer

Læs mere

FairSSL Fair priser fair support

FairSSL Fair priser fair support Exchange 2010 SSL certifikat administration Følgende vejledning beskriver hvordan man vælger hvilke adresser der skal være i ens Exchange 2010 SAN SSL certifikat. Derudover er der tekniske guides til at

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere