En kort introduktion til JDBC
|
|
- Holger Lange
- 7 år siden
- Visninger:
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 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 mereEn 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 mereIntroduktion 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!
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 mereMySQL 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 mereUniversity 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 mereEksempel 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 mereTest 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 mereWeb- 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 mereUniversity 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 merePrepared 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 mereUniversity 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 mereEksempel: 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 mereDM507 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 mereBemæ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 mereSerialization 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 mereIndledning. 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 mereProgrammering 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 mereDM507 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 mere9.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 mereListen 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 mereDM01 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 mereJSP, 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 mereLø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 mereOpdatering 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 mereGeografisk 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 mereVideregå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 mereAAU, 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 mereOpret 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 mereDM507 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 mereKlasser 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 merePython 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 mereDM01 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 mereKIH 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 merePHP 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 mereOpsæ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 mereRuko 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 mereInstallationsguide 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 mereStudiepraktik. 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 mereInstallation 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 mereRigtig 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 mereVejledning. 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 mereDANMARKS 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 mereUniversity 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 mereKursus 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 mereDM507 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 mereVirkefeltsregler 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 mereBRP 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 mereDM507 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 mereExceptions 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 mereOpdatering 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 mereOpsæ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 mereAbstrakte 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 mereEksamens 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 mereSWC 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 mereDen 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 mereImport 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 mereParameters. 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 mereProgrammering 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 mereb) 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 mereIndholdsfortegnelse 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 mereSkriftlig 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 merePHP 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 mere02101 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 mereHvad 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 mereSoftware 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 mereGrundlæ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 mereSkriftlig 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 mereTree 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 mereJava 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 mereProgrammering 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 mereFleeDa (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 mereRMI 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 mereAdministrator - 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 mereIntroduktion 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 mereMartin 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 mereForelæ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 mereNoter 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 mereVejledning 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 mereLæ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 mereDM502. 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 mereOpsæ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 mere3. 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 mereTimePlan 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 mereAdministrator - 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 mereForelæ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 mereKom 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 mereSkrevet 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 mereProgrammering 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 mereForelæ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 mereProgrammering 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 mereDag 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 mereOpenTele 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 mereHent 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 mereHELLO 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 mereBrugermanual 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 mereTilslutning 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 mereInstallation 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 mereFairSSL 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 mereKapitel 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