Avatar billede eikhorsholm Nybegynder
06. november 2006 - 12:22 Der er 12 kommentarer og
1 løsning

Opret liste med brugere fra DB med unikt ID.

Jeg har en jList som jeg gerne vil have fyldt ud med brugere fra en DB.
Jeg har en klasse som laver et ResultSet fra en SQL-sætning og med denne laver jeg dette:

ResultSet brugere = database.executeQuery("SELECT id, fornavn, efternavn FROM brugere");

Hvordan får jeg nu udfyldt min liste med resultatet herfra?

Samtidig er det MEGET vigtigt at hver række i listen på en eller anden måde får tilknyttet id'et tilhørende den respektive bruger, i det jeg skal bruge dette hvis jeg vil opdatere, slette el. lign.
Avatar billede mikkelbm Nybegynder
06. november 2006 - 12:34 #1
1) Opret et objekt der modsvarer din tabel i databasen - altså med id, navn, etc. overskriv eventuelt toString metoden, så du kan få en repræsentation af objektet i listen.
2) Løb dit resultset igennem og opret objekter ud fra de data du trækker ud.
3) Tilføj dit objekt til din jlist med addObject metoden.
Avatar billede eikhorsholm Nybegynder
06. november 2006 - 12:40 #2
Men vil der så ikke i min lsite, stå de forskellige brugers id'er?
Jeg ønsker blot at få skrevet deres navne ud, men stadig få tilknyttet deres id til senere brug.
Avatar billede hacked Nybegynder
06. november 2006 - 12:48 #3
//Der tages forbehold for mindre fejl.

public class Bruger {
  private int id;
  private string fornavn;
  private string efternavn;

  public Bruger(int id, String fornavn, String efternavn) {
    this.id = id;
    this.fornavn = fornavn;
    this.efternavn = efternavn;
  }

  public String toString() {
    return ""+id;
  }

  //Get + Set metoder
  public int getID() {
    return this.id;
  }
}

public class MyClass {

  public MyClass() {

  }

  //Metode der opretter liste:
  public Vector<Bruger> getBrugerVector()
  {
    Vector<Bruger> brugerVector = new Vector<Bruger>();
    ResultSet rs = database.executeQuery("SELECT id, fornavn, efternavn FROM brugere");
    while (rs.next()) {
      //Kan aldrig huske om column starter fra 0 eller 1
      String id = rs.getInt(1);
      String fornavn = rs.getString(2);
      String efternavn = rs.getString(3);
      Bruger b = new Bruger();
      brugerVector.add(b);
    }
    return brugerVector;
  }
}


//Kode vedrørende JList

MyClass my = new MyClass();
JList jList = new JList(my.getBrugerVector());

//Til at få fat i selected objekt i JList
Bruger bruger = (Bruger) jList.getSelectedValue();
int id = bruger.getID();
Avatar billede mikkelbm Nybegynder
06. november 2006 - 12:49 #4
Og præcis det opnår du ved at gøre som jeg beskriver. Du kan jo selv bestemme hvad du vil vise via toString metoden. Der kan du jo bare returnere fornavnnavn + efternavn eller hvad du nu ønsker.
Senere kan du så tilgå de objekter og hive id ud derfra.
Avatar billede hacked Nybegynder
06. november 2006 - 12:50 #5
Hov så ikke jeres kommentarer.

Hvis du vil have fornavn + efternavn til at stå i JList skal toString() selvfølgelig være:

public String toString() {
  return this.fornavn + " " this.efternavn;
}
Avatar billede hacked Nybegynder
06. november 2006 - 12:54 #6
Slåfejl*
public String toString() {
  return this.fornavn + " " + this.efternavn;
}
Avatar billede eikhorsholm Nybegynder
06. november 2006 - 13:03 #7
Hmm, ja ok :-)

Jeg ved godt, det ikke lige er helt forklaret i mit spørgsmål, men hvad nu hvis jeg f.eks. har brugerne i en tabel i stedet og gerne vil opdatere brugeren med id 5.
Er der så ikke en metode, hvor man kan opdatere netop den brugere i tabellen uden at skulle løbe alle rækkerne igennem for at finde ud af hvilken bruger der har netop dette id og dermed hvilken række man skal opdatere?

Laver du ikk et svar, pointene er dine :-)
Avatar billede mikkelbm Nybegynder
06. november 2006 - 13:19 #8
Alternativt kan du gemme din objekter i en hashtable hvor du kan slå op på id.

(hvem skal smide et svar?)
Avatar billede hacked Nybegynder
06. november 2006 - 13:31 #9
Jeg er ikke helt med på hvad du mener.

Når det gælder JList kan du finde ud af hvilken bruger han har valgt at ændre:
Bruger bruger = (Bruger) jList.getSelectedValue();
Når du har fundet brugeren er det blot at sætte værdier.

Når det er en JTable tilføjer du en listener til dit JTable. En listener hvor du fx. har overskrevet tableChanged(TableModelEvent e).
Du kan herefter finde ud af hvilken row/column brugeren har ændret i. Såfremt du i dit JTable har en ID-column row kan du finde ud af hvilken bruger det er. Du kan også gå ud fra hvilken row-index det er. Det kræver så, at dine objekter er placeret på tilsvarende index i din liste med brugere.

Ved SQL bruger du update med where til at specificere hvilken bruger du vil updatere.

Ps. Det kan være det kan gøres på andre måder når du anvender JTable. Jeg er ikke JTable ekspert :D .
Avatar billede eikhorsholm Nybegynder
06. november 2006 - 14:49 #10
malkor, laver du ikk et svar?
Tak for alle svar!
Avatar billede eikhorsholm Nybegynder
06. november 2006 - 14:49 #11
Hvis der er nogen som vil komme med et meget simpelt eksempel på hvorledes en listener skal kodes, vil jeg være super glad ;-)
Avatar billede eikhorsholm Nybegynder
21. november 2006 - 10:04 #12
Lukker.
Avatar billede hacked Nybegynder
21. november 2006 - 12:59 #13
Glemte vist at lægge et svar :) No Problem.
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