Avatar billede coolfisk Nybegynder
23. november 2003 - 18:01 Der er 21 kommentarer og
1 løsning

Java & databaser

Har du en god metode man kan sammenligne en integer, med data fra en database? Her er min hentAlle, som henter række for række og ligger dem i en vektor....   

public Vector hentAlle() throws SQLException
  {
    Vector alle = new Vector();
    ResultSet rs = stmt.executeQuery("SELECT * FROM PLADER");
    while (rs.next())
    {
      // brug kolonneindeks i stedet for kolonnenavn
      Plade k = new Plade( rs.getInt(1), rs.getInt(2),  rs.getInt(3), rs.getInt(4);
      alle.addElement(k);
    }
    return alle;
  }

Hver plade består af: NR, TAL1, TAL2, TAL3. Og det er et bango program jeg er igang med. Så det vil sige at man skal indtaste et tal, og det skal sammenlignes med hvert tal i hver plade.

Og der kan være x antal plader....
Avatar billede arne_v Ekspert
23. november 2003 - 18:06 #1
rs.getInt(ix) returnerer et tal. Og det kan du sammenligne med et andet tal
helt normalt.

Så jeg forstår ikke problem stillingen.
Avatar billede coolfisk Nybegynder
23. november 2003 - 18:13 #2
Denne del af koden ligger i en seperat klasse, vil kalde checktal() fra mainen, som skal indlæse databasens plader og checke dem med indtastet tal
Avatar billede coolfisk Nybegynder
23. november 2003 - 18:19 #3
Den returne vektoren alle.... kan man ikke dele den op alle.elementAt(række 1) og dele talene op?
Avatar billede arne_v Ekspert
23. november 2003 - 18:46 #4
Du kan vel teste med:

if(((Plade)alle.elementAt(ix)).getX() == val) {
Avatar billede arne_v Ekspert
23. november 2003 - 18:46 #5
Og så en for løkke omkring ...
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:04 #6
den kender ikke .getX ?
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:15 #7
Og det første element i all er en string der ser således ud:

nr: tal11 - tal12 - tal13
Avatar billede arne_v Ekspert
23. november 2003 - 19:21 #8
.getX er den metode i Plade klassen som henter den værdi ud du vil
sammenligne med - og den hedder noget andet - jeg ved bare ikke hvad
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:27 #9
du må bære over med mig, er lidt newbie indenfor området.... her er klassen, med metoder

import java.sql.*;
import java.util.*;

public class Databaseforbindelse
{
  private Connection forb;
  private Statement stmt;

  public Databaseforbindelse() throws Exception
  {

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//    forb = DriverManager.getConnection("jdbc:odbc:KUNDER");
    forb = DriverManager.getConnection("jdbc:odbc:PLADER","","");
    stmt = forb.createStatement();


  }

  public void sletAlleData() throws SQLException
  {
    stmt.execute("delete from PLADER");
  }

  public void sletEnPlade(int nr) throws SQLException
  {
    stmt.execute("delete from PLADER where NR = 'nr'");
  }


  public void opretTestdata() throws SQLException
  {
    try { // hvis tabellen allerede eksisterer opstår der en SQL-udtagelse
        stmt.executeUpdate(
        "create table PLADER (NR integer, TAL11 integer, TAL12 integer, TAL13 integer, TAL14 integer, TAL15 integer, TAL21 integer, TAL22 integer, TAL23 integer, TAL24 integer, TAL25 integer, TAL31 integer, TAL32 integer, TAL33 integer, TAL34 integer, TAL35 integer)" );
    } catch (SQLException e) {
      System.out.println("Kunne ikke oprette tabel: "+e);
    }
  // stmt.executeUpdate("insert into PLADER values(1, 10, 20)");
  // stmt.executeUpdate("insert into PLADER values(2, 5, 10)");
  }

  public void indsæt(Plade k) throws SQLException
  {
    stmt.executeUpdate("insert into PLADER (NR,TAL11,TAL12,TAL13,TAL14,TAL15,TAL21,TAL22,TAL23,TAL24,TAL25,TAL31,TAL32,TAL33,TAL34,TAL35) values("
                      + k.nr + ", " + k.tal11 + ", " +k.tal12+", " + k.tal13 + ", " + k.tal14 + ", " + k.tal15 + ", " + k.tal21 + ", " + k.tal22 + ", " + k.tal23 + ", " + k.tal24 + ", " + k.tal25 + ", " + k.tal31 + ", " + k.tal32 + ", " + k.tal33 + ", " + k.tal34 + ", " + k.tal35 + ")");
  }

  public Vector hentAlle() throws SQLException
  {
    Vector alle = new Vector();
    ResultSet rs = stmt.executeQuery("SELECT * FROM PLADER"); //NR, TAL1 from PLADER");
    while (rs.next())
    {
      // brug kolonneindeks i stedet for kolonnenavn
      Plade k = new Plade( rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getInt(4), rs.getInt(5), rs.getInt(6), rs.getInt(7), rs.getInt(8), rs.getInt(9), rs.getInt(10), rs.getInt(11), rs.getInt(12), rs.getInt(13), rs.getInt(14), rs.getInt(15), rs.getInt(16));
      alle.addElement(k);

    }
    return alle;
  }
}
Avatar billede arne_v Ekspert
23. november 2003 - 19:30 #10
Det er Plade klassen der er mest interessant her.
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:33 #11
public Plade(int n, int k, int k2, int k3)
{
  int nr;
  int tal11;
  int tal12;
  int tal13;
 
  public Plade(int n, int k, int k2, int k3)
  {
    nr = n;
    tal11 = k;
    tal12 = k2;
    tal13 = k3;
   
  }

  public String toString()
  {
    return nr+": "+tal11+" - "+tal12+" - "+tal13;
  }
}
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:35 #12
dog ikke 2 gange ;)
Avatar billede arne_v Ekspert
23. november 2003 - 19:35 #13
Så tror jeg at du leder efter noget som:

int fnd = 77;
Vector alle = dbf.hentAlle();
for(int i = 0; i < alle.size(); i++) {
  Plade p = (Plade)alle.get(i);
  if(p.tal13 == fnd) {
      System.out.println("Jeg fandt nr. 77 !!);
  }
}
Avatar billede arne_v Ekspert
23. november 2003 - 19:38 #14
Det ville iøvrigt være mere objekt orienteret hvis du encapsulatede de
members.

public class Plade {
    private int nr;
    private int tal11;
    private int tal12;
    private int tal13;

    public Plade(int n, int k, int k2, int k3) {
        nr = n;
        tal11 = k;
        tal12 = k2;
        tal13 = k3;

    }

    public String toString() {
        return nr + ": " + tal11 + " - " + tal12 + " - " + tal13;
    }

    public int getNr() {
        return nr;
    }

    public int getTal11() {
        return tal11;
    }

    public int getTal12() {
        return tal12;
    }

    public int getTal13() {
        return tal13;
    }

    public void setNr(int i) {
        nr = i;
    }

    public void setTal11(int i) {
        tal11 = i;
    }

    public void setTal12(int i) {
        tal12 = i;
    }

    public void setTal13(int i) {
        tal13 = i;
    }

}
Avatar billede arne_v Ekspert
23. november 2003 - 19:39 #15
Og så lavede koden som:


int fnd = 77;
Vector alle = dbf.hentAlle();
for(int i = 0; i < alle.size(); i++) {
  Plade p = (Plade)alle.get(i);
  if(p.getTal13() == fnd) {
      System.out.println("Jeg fandt nr. 77 !!);
  }
}
Avatar billede coolfisk Nybegynder
23. november 2003 - 19:49 #16
prøver lige at implemetere det i programmet
Avatar billede coolfisk Nybegynder
23. november 2003 - 20:05 #17
så bliver jeg nød til at lave en funktion inden i Databaseforbindelse, som checker pladen? Hvordan skulle jeg ellers kalde klassen Plade, da den er blevet oprette i Databaseforbindelse.
Avatar billede arne_v Ekspert
23. november 2003 - 20:07 #18
Nej.

Den kode skal formentlig ligge udenfor både Databaseforbindlese og Plade.
Avatar billede coolfisk Nybegynder
23. november 2003 - 20:28 #19
cool nok har fået det til at virke, også meget logisk :)
Avatar billede coolfisk Nybegynder
23. november 2003 - 20:29 #20
du har fortjent pointene igen...
Avatar billede arne_v Ekspert
23. november 2003 - 20:30 #21
ok
Avatar billede coolfisk Nybegynder
23. november 2003 - 20:33 #22
Nu skal der snart spilles ZuluBingo... er nok færdig med programmet engang i næste uge. :)
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