Avatar billede delirious Nybegynder
05. juli 2004 - 23:58 Der er 16 kommentarer og
1 løsning

Finde specifikke ting i database

Jeg sidder og roder med noget database til CDer.
Jeg prøver at hente alle albums ud som en artist har lavet, men af en eller anden grund henter den alle albums for alle artister i databasen ud.

Jeg er ikke nogen haj til java, så jeg er måske helt forkert på den :)

Jeg har følgende kode:
-- Controller klasse --
  public void getArtistCDer(String artist) {
    RDBOperations rdb = new RDBOperations();
    Vector v = new Vector();
    rdb.openDb();
    v = rdb.getAlleCDer();
    rdb.closeDb();

    for (int i = 0; i < v.size(); i++) {
      CD c = (CD) v.elementAt(i);
      if (artist == c.getArtist()){
        rdb.openDb();
        rdb.getArtistCDer(c.getArtist());
        rdb.closeDb();
      }
    }
  }

-- RDBOperations --
  public Vector getArtistCDer(String artist) {
    CD c;
    Vector cder = new Vector();

    try {
      rs = stmt.executeQuery("SELECT artist FROM cder");
    }
    catch (Exception ex) {
      System.err.println("Fejl i database getArtistCDer " + ex.getMessage());
    }

    try {
      while (rs.next()) {
        c = new CD();
        c.setCdnummer(rs.getInt("cdnummer"));
        c.setArtist(rs.getString("artist"));
        c.setAlbum(rs.getString("album"));
        String tekst = "";
        tekst = rs.getString("udlaan");
        if (tekst.equals("true")) {
          c.setUdlaan(true);
        }
        else {
          c.setUdlaan(false);
        }
        cder.addElement(c);
        System.out.println(c);
      }
    }
    catch (Exception ex) {
      System.err.println("Fejl i while-løkke: " + ex.getMessage());
    }
    return cder;
  }

-- run klasse --
c.getArtistCDer("Audio Adrenaline");
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:01 #1
Det nemmeste du kan gøre lige nu er

  rs = stmt.executeQuery("SELECT artist FROM cder where artist='"+artist+"'");
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:02 #2
Og du skal vist have SELECT cdnummer,artist,album,udlaan FROM ....
Avatar billede arne_v Ekspert
06. juli 2004 - 00:02 #3
Prøv:

rs = stmt.executeQuery("SELECT * FROM cder WHERE artist='" + artist + "'");
Avatar billede arne_v Ekspert
06. juli 2004 - 00:02 #4
too late
Avatar billede delirious Nybegynder
06. juli 2004 - 00:17 #5
ok... Jeg har nu sat denne ind: rs = stmt.executeQuery("SELECT * FROM cder WHERE artist='" + artist + "'");
Det var egentligt ret åbenlyst :)
Dog virker det stadig ikke... har lige fundet ud af at c.getArtist() returnerer alle artister i databasen - det er da vist ikke lige meningen?
Nogen forslag?
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:25 #6
Den kode du viser i spørgsmålet kan ikke køre uden fejl. Er du sikker på du har oversat dit java-program?
Avatar billede delirious Nybegynder
06. juli 2004 - 00:28 #7
sorry... det må være fordi jeg ikke har smidt min container-klasse med:
package cddatabase;

public class CD {
  private int cdnummer;
  private String artist;
  private String album;
  private boolean udlaan;

  public CD() {
  }

  public CD(int cdnummer, String artist, String album, boolean udlaan){
    this.cdnummer = cdnummer;
    this.artist  = artist;
    this.album    = album;
    this.udlaan  = udlaan;
  }

  public void setCdnummer(int cdnummer) {this.cdnummer = cdnummer;}
  public void setArtist(String artist)  {this.artist = artist;}
  public void setAlbum(String album)    {this.album = album;}
  public void setUdlaan(boolean udlaan) {this.udlaan = udlaan;}

  public int getCdnummer()  {return cdnummer;}
  public String getArtist() {return artist;}
  public String getAlbum()  {return album;}
  public boolean getUdlaan() {return udlaan;}

  public String toString(){
    return "CD-nummer: " + cdnummer + "\nArtist: " + artist + "\nAlbum: " + album + "\nUdlånt: " + udlaan + "\n";
  }

}
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:29 #8
Derudover er det lidt skørt at hente alle CD-er
  v = rdb.getAlleCDer();
og så løbe dem igennem for at finde nogle udvalgte, når du nu har
  public Vector getArtistCDer(String artist) {
Når du kalder den, bruger du ikke dens returværdi til noget.

...og lidt rodet at have 2 metoder med samme navn: getArtistCDer  ;)
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:31 #9
Og så har du en lille bommert her:
  if (artist == c.getArtist()){
skal være
if (artist.equals(c.getArtist())){
Avatar billede delirious Nybegynder
06. juli 2004 - 00:31 #10
En amatør jeg er :P
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:32 #11
rs.getString("album") giver en exception hvis du ikke har den med i din
SELECT - men på grund af == ovenfor kaldes den ikke. Derfor har du ikke
fået fejl på den.
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:35 #12
Vi elsker vel alle Java.

Amatør, fra latinsk: "amator" - en der elsker.
Avatar billede delirious Nybegynder
06. juli 2004 - 00:37 #13
Lige præcis ;)
Men nu virker det rent faktisk lige på nær et par småting - så jeg siger mange tak for hjælpen!
Hvordan er det lige med point? Skal du ikke poste som svar for at jeg kan give dig dem?
Avatar billede erikjacobsen Ekspert
06. juli 2004 - 00:39 #14
Jo, i princippet, men nu samler jeg slet ikke på point, så du får ingen svar fra mig.
Måske Arne vil have? Ellers er det dine.
Avatar billede delirious Nybegynder
06. juli 2004 - 00:44 #15
Ok ok - men så siger jeg da tak for hjælpen :)
Avatar billede arne_v Ekspert
06. juli 2004 - 18:43 #16
jeg har ikke bidraget med noget => ingen point til mig

(i modsætning til Erik samler jeg på point, men jeg skal også bidrage med bare
en lille bitte smule for at have fortjent dem)
Avatar billede delirious Nybegynder
19. oktober 2004 - 12:29 #17
svar
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