Avatar billede aocc Nybegynder
21. april 2004 - 09:59 Der er 43 kommentarer og
1 løsning

Vector og datalagrings klasse

Jeg har en vector som indeholder noget date. Dette skal skal jeg ha overført til en datalageringsklasse (vist nok med nogle set og get metoder) så det er let at hive dataen ud enkeltvis. Jeg er bare i tvivl om hvordan det kan se ud, kan nogen vist mit et eksempel eller give et hint:-)
På forhånd tak.
Avatar billede arne_v Ekspert
21. april 2004 - 10:16 #1
Jeg er ikke helt sikker på at jeg forstår hvad du vil.

Du har en bean klasse d.v.s. med get og set som indeholder en "record".

Du har en Vector (eller ArrayList) med et antal objekter af den klasse.

Du kalder en metode i en database klasse med den Vector.

Den metoder løber gennem vektoren, henter hvert objekt ud og laver
en INSERT for hver record.

Eller ?
Avatar billede aocc Nybegynder
21. april 2004 - 10:22 #2
Jeg har brugt min vector til at trække diverse data ud fra en database. Vectoren skal på en eller anden måde smide dette data i en datalagerings klasse, hver element af vectoren bliver til en string eller int. Her efter kan jeg så trække dataen ud i en vilkårlig rækkefølge. Det er meningen med galskaben:-) (Og så har jeg for fornemmelsen at det er noget med nogle get og set metoder, der skal være i denne datalagerings klasse.
Er jeg forstålig?
Avatar billede arne_v Ekspert
21. april 2004 - 10:32 #3
Normalt er det database->bean->Vector, database->vector->bean er lidt utraditionelt.
Avatar billede aocc Nybegynder
21. april 2004 - 10:44 #4
Jeg er vist ikke helt med...
Avatar billede arne_v Ekspert
21. april 2004 - 10:55 #5
Normalt vil man lave noget a la:

Vector v = new Vector();
ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
while(rs.next()) {
    MyBean mb = new MyBean(rs.getInt(1), rs.getString(2));
    v.add(mb);
}
Avatar billede arne_v Ekspert
21. april 2004 - 10:56 #6
Jeg forstår hverken hvordan du gemmer result set output i din vektor eller
hvilken slags klasse du vil flytte vektoren over i.
Avatar billede aocc Nybegynder
21. april 2004 - 11:17 #7
jamen det kan da godt være at det er mig der er galt på den.
Avatar billede aocc Nybegynder
21. april 2004 - 11:23 #8
du kan dog svare mig på en helt anden ting mens jeg har dig...hvis du gidder.
Hvordan får jeg mine tids attributter fra access til at virke korrekt i java.?
Avatar billede arne_v Ekspert
21. april 2004 - 11:25 #9
rs.getDate(tidsfelt) burde returnere en korrekt java.util.Date
Avatar billede aocc Nybegynder
21. april 2004 - 11:28 #10
tak
Avatar billede signori Nybegynder
21. april 2004 - 11:53 #11
Nu kan det godt være at det er mig der læser forkert. Men som jeg læser det spørges der om hvordan man indkapsler en Vector i en container klasse. Altså noget med
class Container
{
  private Vector v; 
  public container()
  {
    v = new Vector();
  }
  public void insert(Object o)
  {
    v.add(o);
  }
  public Object get(int index)
  {
    return v.get(index);
  }
  .....flere metoder

}

Men måske er det mig der ikke forstår spørgsmålet.
Avatar billede aocc Nybegynder
21. april 2004 - 12:28 #12
JA jeg tror du er inde på noget af det rigtige... Altså hvor man så kan hente de enkelte elementer ud fra container klassen og evt. blande dem for så senere at udskrive dem.
Avatar billede aocc Nybegynder
21. april 2004 - 12:37 #13
Det jeg havde tænkt mig var noget ligende:

private String navn;
private String adresse;
private Int nummer;

public container(Vector v)
{
navn=(String) v.get(0);
adresse = (String) v.get(1);
nummer = Integer.parseInt((String) v.get(2));

}
    public String GetName()
    {
    return navn;
    }

    public void SetName(String name)
    {
    name = navn;

      }

    public String GetAdresse()
    {
    return adresse;
        }
       
          public void SetAdresse(String adresse2)
    {
    adresse2= adresse;

    }


    public int GetNummer()
    {
    return nummer;
}
       
        public void SetLaunched(int number)
        {
      number= nummer;
}


...Og så videre

Hvordan ser det ud?
Avatar billede signori Nybegynder
21. april 2004 - 12:38 #14
Jamen så handler det vel om at tilføje de metoder du skal bruge i ovenstående klasse. Og siden kan du så instantiere et Container objekt i din kode der hvor du skal bruge det. Men jeg vil ikke lade Container klassen tilgå databasen direkte. Istedet vil jeg gøre følgende:

Container c = new Container();
åben forbindelse til DB
eksekver en querey
for(hver række i resultset)
{
  opret et objekt -obj- der indeholder rækkens data
  c.add(obj);
}
arbejd me c som du har lyst.
Avatar billede arne_v Ekspert
21. april 2004 - 12:42 #15
signori>

Din 12:38:33 kommentar ligner faktisk min 10:55:44 kommentar en del.

Det er måden at gøre det på.
Avatar billede signori Nybegynder
21. april 2004 - 12:47 #16
og så lave en klasse der indkapsler dit objekt

class Record
{
  private String navn;
  private String adresse;
  private int nummer;
  public Record()
  {
  }
    public String GetName()
    {
    return navn;
    }

    public void SetName(String name)
    {
    name = navn;

      }

    public String GetAdresse()
    {
    return adresse;
        }
       
          public void SetAdresse(String adresse2)
    {
    adresse2= adresse;

    }


    public int GetNummer()
    {
    return nummer;
}
       
    public void SetLaunched(int number)
    {
    number= nummer;
}
}

Inde i for løkken fra ovenstående skriver du så - i pseudo kode -
Record r = new Record();
r.setNavn(resultset.getString(0);
...osv
c.add(r);

Så vil du ende op med en Container der indeholder X antal records som du så kan arbejde med
Avatar billede signori Nybegynder
21. april 2004 - 12:49 #17
Arne_V > du har ret. Jeg har overset din besvarelse. Jeg pakker bare vectoren ind. Men ellers er de i princippet ens.
Avatar billede arne_v Ekspert
21. april 2004 - 12:52 #18
Man kan sagtens pakke den ind.

Hvis man gør det skulle man nok lave den type safe.

class Container
{
  private Vector v;
  public container()
  {
    v = new Vector();
  }
  public void insert(Record o)
  {
    v.add(o);
  }
  public Record get(int index)
  {
    return (Record)v.get(index);
  }
  .....flere metoder

}
Avatar billede signori Nybegynder
21. april 2004 - 12:55 #19
Enig. Det var mere for eksemplets skyld. Omvendt vil man få en mere generisk klasse ved at bruge Object...men større risiko for fejl og flere casts
Avatar billede aocc Nybegynder
21. april 2004 - 14:04 #20
Signori --- du skriver at" Men jeg vil ikke lade Container klassen tilgå databasen direkte" Det ville jeg da heller ikke gøre hvis jeg bare parameter overførte min vector fra min database.
Avatar billede aocc Nybegynder
21. april 2004 - 14:04 #21
undskyld der skulle selvfølgelig stå database Klasse og ikke bare database
Avatar billede signori Nybegynder
21. april 2004 - 14:11 #22
Nej....jeg ved ikke hvad jeg mente med det...jeg må have sovet lidt :)
Avatar billede aocc Nybegynder
21. april 2004 - 14:16 #23
oki jamen jeg tror jeg har fat på det nu... jeg prøver lige og vender tilbage...
Avatar billede aocc Nybegynder
21. april 2004 - 15:43 #24
hmm hvad er forskellen på add og addElement?
Avatar billede arne_v Ekspert
21. april 2004 - 15:52 #25
Ingen.

addElement var den oprindelige fra JDK 1.0

I JDK 1.2 blev Vector ændret til at implementere List og dermed skulle
den have en add metode.

Og addElement blev bibeholdt af kompabilitets hensyn.
Avatar billede signori Nybegynder
21. april 2004 - 15:55 #26
Arne_V > Og det er bare sådan noget man kan huske?? :)
Avatar billede arne_v Ekspert
21. april 2004 - 16:02 #27
Jeg ved ikke med "man" - jeg kunne tilfældigvis.
Avatar billede aocc Nybegynder
21. april 2004 - 16:59 #28
ok... Nu er jeg godt nok løbet ind i problemer. Jeg har fået det til at virke med container klassen, som ser således ud:

import java.sql.Date;

public class container
{
private String name;
private String adresse;
private int kode;
private Date Time;
   

    public container(String n, String a, int k, Date t)
    {
               
    }

    public String GetName()
    {
    return name;

    }

    public void SetName(String navn)
    {
    name = navn;

        }

    public String Getadresse()
    {
    return adresse;

    }

    public void Set adresse(String adr)
    {
    adresse = adr;
    }
..OSV med de sidste metoder
Men den driller når jeg skal hente dataen ind i mit textarea i gui klassen. Hvad skal der skrives i korte træk.
Avatar billede arne_v Ekspert
21. april 2004 - 17:36 #29
Det nemmeste var nok at lave en toString metode som lavede en streng
repræsentation af objektet.
Avatar billede aocc Nybegynder
21. april 2004 - 17:43 #30
jamen problemet er jo at der også skal overføres en 'tid'. Hvis jeg bruger en toString virker det jo ikke helt vel?
Avatar billede aocc Nybegynder
21. april 2004 - 17:53 #31
JEg tænkt nok i retningen af dette:

private container cont;

class gui
{
cont = new container();
....
TA.append(cont.GetName());
}
men det er den ikke så glad for
Avatar billede arne_v Ekspert
21. april 2004 - 17:56 #32
Hvorfor kan toString ikke indeholde en tid ?
Avatar billede aocc Nybegynder
21. april 2004 - 17:59 #33
det ved jeg ikke ...det troede jeg bare ikke...Jeg kan bare ikke rigtigt se hvordan sådan en skulle kunne laves. Har du et eksempel. Og så er det vist også på tide med et svar. Kan jeg give jer begge point?
Avatar billede arne_v Ekspert
21. april 2004 - 18:01 #34
public class container
{
  private String name;
  private String adresse;
  private int kode;
  private Date Time;
  ...
  public String toString() {
      return "[" + name + "," + adresse + "," + kode + "," + Time + "]";
  }
}
Avatar billede arne_v Ekspert
21. april 2004 - 18:02 #35
Du beder os begge ligge et svar

Når det er sket så:
  markerer du begge navne
  klikker accepter
Avatar billede arne_v Ekspert
21. april 2004 - 18:02 #36
Og et svar fra mig
Avatar billede aocc Nybegynder
21. april 2004 - 18:08 #37
Ok det virkede næsten. teksten der kommer ud på mit textarea ser sådan ud:

javax.swing.JTextArea
[,0,0,290x490,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=null,alignmentY=null,border=javax.swing.plaf.basic.BasicBorders$MarginBorder@1a06e38,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=153,g=153,b=153],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],selectionColor=javax.swing.plaf.ColorUIResource[r=204,g=204,b=255],colums=0,columWidth=0,rows=0,rowHeight=0,word=false,wrap=true]
Avatar billede aocc Nybegynder
21. april 2004 - 18:21 #38
Har du nogen ide om hvad det kan være?
Avatar billede arne_v Ekspert
21. april 2004 - 18:23 #39
Det er vist ikke din container du har lavet toString på.

textarea.setText(conatiner.toString());
Avatar billede aocc Nybegynder
21. april 2004 - 18:27 #40
her er hvad jeg har skrevet i gui'en

kundeliste.append(container.toString());
Avatar billede arne_v Ekspert
22. april 2004 - 01:04 #41
Skulle signori ikke have haft halvdelen af pointene ?
Avatar billede arne_v Ekspert
22. april 2004 - 01:05 #42
Jeg tror at vi skal se lidt mere kode for at løse det sidste mysterium.
Avatar billede arne_v Ekspert
22. april 2004 - 07:53 #43
Med hensyn til point - skal jeg overføre halvdelen til signori ?
Avatar billede aocc Nybegynder
22. april 2004 - 13:24 #44
Hvis signori vil ha nogle point, må han lige skrive til mig, så skal jeg nok give ham nogen.
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