Hvordan præsentere man koden i eksamen

Tags:    programering


Hej Udviklere.

Kan man forklare til mig hvad der foregår i denne klase. Jeg skal snart til min Førsteårsprøve. Så selvfølgelig er usikker og nervøs :(


Fold kodeboks ind/udJava kode 




6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 10 karma
Sorter efter stemmer Sorter efter dato
Det er lidt en rodet omgang du har skrevet men vil forsøge at svare på spørgsmålene i den rækkefølge du har skrevet dine spørgsmål. Synes dog stadig du bør gøre mere ud af dine spørgsmål men hva faen jeg kedede mig. :)


Det jeg forstår end til videre er
Connection er forbindelse til databasen
Statement er en SQL sætning
ResultSet er en pege-bind


Korrekt forstået. For hvert SQL udtryk du ønsker at køre på databasen opretter du et Statement objekt. Det skal dog siges at i dit kodeeksempel er det ikke ligefrem sikker kode da det kan misbruges til SQL injections (du kan via brugerinput ændre på hvad SQL udtrykket rent faktisk gør. Fx kan man slette hele databasen).

Jeg håber du selv er klar over hvad et page-bind er. Ellers er det nærmere et udtryk for et objekt der indeholder resultatet af dit SQL kald hvor du løbende kan hente resultater ud fra (hvis der er mere end en række).


(public Gaest opretGaest(String navn, String adresse, String tlf,
String email)) Denne metode opretter en gæst, men er ikke med det der sker her fra

(

} catch (SQLException ex) {
System.out
.println("Der er opstået en fejl ved forsøg at finde gaest ");

} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
System.out
.println("Der er opstået en fejl ved forsøg at finde gaest ");
}
}
}

)


Jeg regner med du her mener "catch" og "finally". Dette er exception-handling hvor du kan angive hvad der skal ske hvis koden fejler. Dette bruges især i tilfælde hvor du som udvikler ikke kan garantere at koden virker (fx når du forbinder til en database kan du som udvikler ikke garantere at forbindelsen til databasen kan oprettes).

Du angiver dette ved at pakke den problemfyldte kode ind i en try{ ... } konstruktion som efterfølgende har en catch (...) { ... } blok og sidst med mulighed for en finally { ... }.

Når koden køres vil alt inde i "catch" blokken køres men hvis der sker en exception vil koden stoppe med at fortsætte herinde. Herefter vil Java se efter om der findes en "catch" blok der kan bruges til at samle fejlen op. I dette tilfælde samles der en SQLException op (eller exceptions der nedarver fra SQLException).

Hvis exception'en samles op vil koden inde i catch-blokken køres og her kan du fx skrive en fejlbesked eller forsøge at fikse problemet så programmet fortsat kan køre.

finally-blokken er så noget kode du ønsker der altid skal køres uanset om der kommer en fejl eller ej inde i din catch-blok. Dette bruges ofte til at rydde op i fx åbne databaseforbindelser, filer eller andre ressourcer.

Lig mærke til at i koden opretter du et Statement og dette skal lukkes for at undgå spild af ressourcer mens dit program kører. Derfor er koden i din finally lavet således at hvis din catch fik oprettet et statement men fejlede i at køre dit SQL så vil vi stadig få lukket dit statement.

Åh ja, det kan virke lidt rodet i din kode men årsagen til der er en try-blok omkring "stmt.close()" er fordi dette også kan give en exception. Så hvis dette sker så udskrives der blot en fejlbesked fordi det ikke er muligt at gøre andet.


Det jeg vil vide er hvad er forskellen mellem


import java.util.ArrayList;
import java.util.List;


og igen


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


Altså forskellen er du importerer forskellige klasser ind i din klasse. Når du importerer en klasse så kan du fx skrive "ArrayList" frem for "java.util.ArrayList" og Java vil stadig vide hvad for en "ArrayList" du faktisk mener. Forskellen mellem de to grupper du angiver er det ene er klasser fra pakken java.util mens de andre er java.sql. Java benytter pakker til at opdele formålet med enkelte klasser således du på denne måde kan vide hvad der er relevant for SQL relateret arbejde og hvad der kan bruges som generelle værktøjer (util).


Det er desuden muligt at skrive "java.sql.*" og du vil så importere alle klasser der er en del af "java.sql" pakken. Det er dog ofte ikke nogen god ide uden du ved hvad du laver (i større projekter kan du godt få noget værre rod når du ikke har helt styr på hvilken udgave af en klasse du bruger).


catch (SQLException e)

catch (SQLException ex)


Læs min beskrivelse omkring exception handling. Forskellen på disse to er blot navnet på den variable der repræsenterer din exception. I din kode gør det ingen forskel da du faktisk ikke bruger exception objektet men hvis du ønsker at udskrive detaljeret fejlinformationer er det meget nyttigt at du kan få fat i exception-objektet og kalde fx "ex.printStackTrace()" der udskriver præcist hvor fejlen er opstået og derved gøre det nemmere at debug.


Den først oprette Gæsten og til sidst returnere findGæstVedTlf : hvorfor man den returnere findGæstVedTlf


Det er for at verificere at gæsten faktisk er kommet ind i databasen. Ved at gemme data i databasen og efterfølgende lave en søgning for at få fat i de nye data, garanterer du at det objekt der kommer ud af "opretGaest" vil være det samme som hvis du fremsøgte gæsten med "findGaestVedTlf".

Det kunne også tænkes at databasen er sat til automatisk at generere et ID til din gæst og dette ID vil du først få når du søger efter din gæst efterfølgende. Fordelen ved at lade databasen generere ID'et er at du på denne måde er sikker på alle ID'er er unikke selvom der skulle være flere der opretter gæster på samme tid (med forskellige instanser af dit program).


Anden metode finde Gæst og starte med public List <Gæst> findGæst og returnere gæstList
Hvad der menes med gæst List


Årsagen til der returneres en liste er at metoden kan returnere flere resultater på en given søgning. Fx er koden lavet sådan du kan nøjes med at søge efter navn og hvis der er flere gæster der har samme navn så vil koden kunne returnere alle gæster med samme navn frem for kun at give dig den første gæst.

I Java angives dette med List<Gaest> som betyder du returnerer en liste med Gaest objekter. Fordelen er du senere kan tage objekter ud af listen og Java vil vide der med sikkerhed er tale om Gaest objekter (hvorefter du kan kalde de metoder der findes for Gaest objekter).


Tredje metode give lidt mening fordi den starte med findGæstVedTlf() og slutte med return gæst


Ja sidste metode returnerer kun en gæst. Dette kunne tyde på at databasemodellen kun tillader en gæst at have et givent tlf-nummer hvilket gør at tlf-nummeret er en unik nøgle til en given gæst.



Hvad tror du der sker?



Hvordan er det helt præcist denne klasse kommer ind i billedet til eksamen? Er det noget kode du selv burde have skrevet eller noget kode din lærer/forelæser har givet dig for at analysere den?

Fordi det lugter ret meget af du ikke selv har løst opgaven ud fra de spørgsmål du stiller. Mange af svarene ville du nok ret selv kunne finde frem til ved endda at køre koden og selv prøve at lege med den.

Desuden er koden skrevet af en person der ved en del mere om Java end du selv giver udtryk for. :)

(Skal gerne hjælpe dig så snart du selv ligger lidt mere arbejde i at formulere dine spørgsmål. Ud fra dine indlæg lader det ikke til du har brugt mere end 1-2 min. og forventer så hjælp.)






Det jeg forstår end til videre er

Connection er forbindelse til databasen

Statement er en SQL sætning

ResultSet er en pege-bind



____________________




(public Gaest opretGaest(String navn, String adresse, String tlf,
String email)) Denne metode opretter en gæst, men er ikke med det der sker her fra

(

} catch (SQLException ex) {
System.out
.println("Der er opstået en fejl ved forsøg at finde gaest ");

} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
System.out
.println("Der er opstået en fejl ved forsøg at finde gaest ");
}
}
}


)
_______________________


Det jeg vil vide er hvad er forskellen mellem


import java.util.ArrayList;
import java.util.List;


og igen


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


Og igen

catch (SQLException e)

catch (SQLException ex)

og hvad er deres opgaver

_________



Der er tre metode efter hinanden der forvirre mig
1. Den først oprette Gæsten og til sidst returnere findGæstVedTlf : hvorfor man den returnere findGæstVedTlf


2. Anden metode finde Gæst og starte med public List <Gæst> findGæst og returnere gæstList
Hvad der menes med gæst List

3. Tredje metode give lidt mening fordi den starte med findGæstVedTlf() og slutte med return gæst





Tak






Indlæg senest redigeret d. 10.01.2016 17:46 af Bruger #21294
Det er noget som jeg skal bare analysere, jeg har kun sættet data fra SQL.




Du har forklaret på et meget flot måde (:
og tak for tips (:



t