Avatar billede trp79 Nybegynder
07. april 2004 - 20:35 Der er 12 kommentarer og
1 løsning

Hvad er god skik i forbindelse resultset?

Hejsa
Jeg har en db_handler klasse og en guiklasse med en jlist.
I min db_handler klasse har jeg så en metode som skal lave et udtræk fra databasen og dette udtræk skal så præsenteres i jlisten. Men er det god skik at returnerer et resultset og så sørge for at connectionen og statementet ikke bliver lukket før resultsættets data er blevet smidt i jlisten - eller skal jeg smide mine data i en eller anden form for liste og returnerer den fra min db_hanlder klasse(fx en arraylist eller en jlist)?

Mvh
Torben
Avatar billede arne_v Ekspert
07. april 2004 - 20:37 #1
Du får (normalt) fejl hvis du forsøger at hente data fra et ResulSet efter at
Connection er closed.

Så vent med at close til du har hentet alle data.
Avatar billede arne_v Ekspert
07. april 2004 - 20:38 #2
Med få client programmer vil det give bedst performance at holde
connection permanent åben (det er dyrt at etablere en connection).
Avatar billede arne_v Ekspert
07. april 2004 - 20:40 #3
Det vil være meget pænt at separere præsentations laget (Swing)
og persisterings laget (JDBC) med f.eks. at have en ArrayList
af beans imellem.
Avatar billede trp79 Nybegynder
07. april 2004 - 20:46 #4
Hej Arne
Jeg er ikke lige med på hvad "en ArrayList af beans" er. Har aldrig selv lavet beans før kun læst lidt om dem.
Men den pæneste måde vil altså være af have noget mellem de to lagt, fx en bean, hvor man set'ter fra db laget og get'ter fra gui laget ?
Avatar billede arne_v Ekspert
07. april 2004 - 20:52 #5
Jeg kunne også have skrevet ArrayList af objekter.

Men jeg mener at objekt type bør overholde bean standarden.

Til sådanne data objekter bør man altid have:
  - implements java.io.Serialzable
  - public get og set metoder for alle felter
  - constructor uden argumenter (evt. andre constructorer med argumenter)
Avatar billede arne_v Ekspert
07. april 2004 - 20:52 #6
DB koden læser rækker og for hver række konstrurer den en bønne og gemmer i en
array list som returneres til præsentatiosn laget.
Avatar billede trp79 Nybegynder
07. april 2004 - 20:57 #7
altså fx hvis det er firma info man har i db:

for hver række i rs
arraylist.add(new Firm(data, fra, resultset));

Så i det tilfælde er Firm altså en bønne og bør overholde bean-standarden.

Er jeg helt galt på den?
Avatar billede arne_v Ekspert
07. april 2004 - 20:59 #8
Du er 100% på det rette spor !
Avatar billede trp79 Nybegynder
07. april 2004 - 21:02 #9
Jeg takker så :)
Smid du bare et velfortjent svar...
Avatar billede arne_v Ekspert
07. april 2004 - 21:20 #10
svar
Avatar billede trp79 Nybegynder
07. april 2004 - 21:43 #11
Jeg har lige et tillægsspørgsmål, hvis det er iorden.
Jeg har ikke nogen resultset.hasNext() metode, men kun en rs.next() bruger eller 1.4.2_01, så den burde vel være der? Det kan vel ikke have noget at sige om jeg bruger en hsqldb?
Avatar billede arne_v Ekspert
07. april 2004 - 21:47 #12
SQL ResultSet er ikke som StringTokenizer og andre.

Eksempel:

        ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
        while(rs.next()) {
            int f1 = rs.getInt(1);
            String f2 = rs.getString(2);
            System.out.println(f1 + " " + f2);
        }

rs.next() henter næste record og returnerer true eller returnerer false
hvsi der ikke er flere records.

Man henter data med getXxxx metoder.

(og vær opmærksom på at felt nummrene starter med 1 ikke med 0 !)
Avatar billede trp79 Nybegynder
07. april 2004 - 22:19 #13
Arh mange tak for det arne. Nu funker det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester