Avatar billede webcreator Nybegynder
07. april 2005 - 15:18 Der er 17 kommentarer og
1 løsning

Hente alle poster ud fra MySQL database og placer i ArrayList

Hej Eksperter.

Jeg har altid været vant til, at arbejde direkte på en database. Nu står jeg så over for den udfordring, at jeg skal kunne hente dataene ud fra en hel tabel, og vise disse i et program. Dette er ikke den store udfordring, da jeg blot kan bruge et dataset. Men hvad hvis jeg ønsker at skabe et objekt med dataene fra hver række i databasen, og efterfølgende placere disse objekter i en ArrayList? (ArrayListen skal faktisk returneres til en grænseflade)
Avatar billede arne_v Ekspert
07. april 2005 - 16:52 #1
skitseret eksempel:

...
SqlDataReader rdr = cmd.ExecuteReader(),
ArrayList lst = new ArrayList();
while(rdr.Read())
{
    lst.Add(new Something((int)rdr[0], (string)rdr[1]));
}
...
Avatar billede webcreator Nybegynder
07. april 2005 - 20:40 #2
Hold da op - det kan jo ikke gøres meget simplere. Mange tak :)
Jeg leger lige lidt med det. Har også fundet noget der hedder iList. Det skulle også være interessant for mit vedkommende.
Avatar billede arne_v Ekspert
07. april 2005 - 20:45 #3
IList er bare et inyterface som ArrayList og diverse andre klasser implementerer.

I finere OOP er:

IList lst = new ArrayList();

finere end:

ArrayList lst = new ArrayList();
Avatar billede webcreator Nybegynder
07. april 2005 - 20:49 #4
Ok, tak for rådet.
Det gode ved iList er, at programmøren/brugeren af min database facade ikke behøver, at kende til typen han/hun hiver ud.
Avatar billede webcreator Nybegynder
07. april 2005 - 20:51 #5
Her et afsnit fra en bog, hvor klassen 'Customers' beskrives :

The users of the Customers class don't really need to know the format this class uses to store its information. All they need to know is how to access the information.
Avatar billede arne_v Ekspert
07. april 2005 - 20:57 #6
Han/hun skal stadigvæk vide hvilken type der hives ud af IList.

Men han/hun behøver ikke at vide om det er en ArrayList eller en custom
collection baseret på CollectionBase.

Principielt en god ting.

I praksis vil jeg ikke finde det så vigtigt i dette tilfælde (men meget vigtigt
i andre tilfælde).
Avatar billede webcreator Nybegynder
07. april 2005 - 21:04 #7
Ok. Det er selvfølgelig værd at tage med i overvejelserne.
Avatar billede webcreator Nybegynder
07. april 2005 - 21:38 #8
Hm, jeg synes ikke min bog indeholdt de helt gode eksempler med iList. Ville lige prøve det, selv om det ikke behøves i denne sammenhæng. Kan bare godt lide at man kan bruge index'er. MSDN indeholdt heller ikke et særlig brugbart eksempel. Du kunne vel ikke hjælpe mig lidt på vej, Arne? Flg. har jeg fra MSDN :

public interface IList : ICollection, IEnumerable
{
}
Avatar billede arne_v Ekspert
07. april 2005 - 21:42 #9
Øh.

Der er intet som helst specielt i det !

public IList GetTheStuff()
{
    IList lst = new ArrayList();
    ...
    return lst;
}

og

IList lst = o.GetTheStuff();
Avatar billede webcreator Nybegynder
07. april 2005 - 21:48 #10
Nej, det ser rigtig nok ud. Men burde jeg ikke kunne hive fat i skidtet vha. index'es ?

lst["fornavn"] - det var det jeg havde håbet på
Avatar billede arne_v Ekspert
07. april 2005 - 21:50 #11
IList/ArrayList kan du kun hente ud af med lst[13] altså med et tal.

For at kune slå op på navn skal du bruge IDictionary/Hashtable.
Avatar billede webcreator Nybegynder
07. april 2005 - 21:51 #12
Ahh, ok. Det var ærgeligt. Men så kan jeg da lige kigge lidt på den i stedet
Avatar billede webcreator Nybegynder
07. april 2005 - 23:33 #13
Tak for hjælpen, Arne. Gider du smide et svar ?
Lige på falderebet :

I en metode kaldet GetInfo() har jeg sat return type til ArrayList. Hvis noget går galt (fanges af en Try/Catch), så skal jeg jo stadig returnere noget. Hvad bør jeg returnere i en sådan situation? Et dummy-array? Jeg vil på en eller anden måde gerne gøre brugeren opmærksom på, at noget er gået galt.
Man kunne måske lave denne : GetInfo(out errorcode)
Men den er jeg ikke så glad for. Bryder mig ikke om at skulle angive en ekstra parameter, blot for at kunne få fat i fejlkoder.
Avatar billede arne_v Ekspert
08. april 2005 - 07:46 #14
svar
Avatar billede arne_v Ekspert
08. april 2005 - 07:47 #15
return null;

eller

return new ArrayList();

eller

throw new DinSpecialException();

alt efter hvad der passer bedst med din logik.
Avatar billede webcreator Nybegynder
09. april 2005 - 16:57 #16
Mange tak :)
Avatar billede arne_v Ekspert
09. april 2005 - 17:02 #17
Og husk at dokumenter hvad du gør.

Der er ikke meget så frustrerende som at sidde med en metode som man
ikke ved hvad gør i en fejlsituation.
Avatar billede webcreator Nybegynder
09. april 2005 - 17:04 #18
Naturligvis - tak igen :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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