vareNr = new JList(); vareNr.setBounds(260, 26, 183, 200); vareNr.setVisible(false); frame.getContentPane().add(vareNr);
final JLabel varenrLabel = new JLabel(); varenrLabel.setText("VareNr og beskrivelse"); varenrLabel.setBounds(260, 3, 183, 14); varenrLabel.setVisible(false); frame.getContentPane().add(varenrLabel);
Du er godt klar over at du aldrig vil kunne sammenknytte varenummer og varetekst med ovenstående kode, ikke? Det du skal gøre i stedet er at oprette en klasse der indeholder ovenstående informationer:
public class Vare { private String vareNr, vareTekst;
public String getVareTekst() { return vareTekst; }
public String toString() { return vareTekst; } }
Og din klasse ser nu sådan her ud (jeg har sat metoden til at returnere listen med varer):
public class Colli { static ResultSet rs; static Statement stmt;
public static Vare[] hentTotalAntal() { try //laver en try catch så mulige fejl fra SQL fanges { Statement stmt = Forbindelse.connection.createStatement(); rs = stmt.executeQuery("SELECT VareNr, lagervare FROM vare");
ArrayList<Vare> totalAntal= new ArrayList<Vare>();
while (rs.next()) //der køres en while løkke i lige så lang tid som der er elementer { String vareNr = rs.getString("VareNr"); String vareTekst = rs.getString("lagervare"); Vare vare = new Vare (vareNr, vareTekst); totalAntal.add (vare); }
return totalAntal.toArray(new Vare[0]);
} catch(Exception e) //Her er der fastsat at alle fejl skal fanges og { System.out.print("\nDer opstod en fejl under hentningen \n"); } } }
3)
Nu skal indholdet fyldes i din JList:
... Vare[] alleVarer = Colli.hentTotalAntal(); // Hent alle varer vareNr = new JList(alleVarer); // Opret JList med de hentede varer vareNr.setBounds(260, 26, 183, 200); vareNr.setVisible(false); ...
Og for ikke at få compile-fejl i 2'eren må du nok hellere indsætte følgende:
catch(Exception e) //Her er der fastsat at alle fejl skal fanges og { System.out.print("\nDer opstod en fejl under hentningen \n"); return new Vare[0]; }
public class Vare { private int vareNr; private String beskrivelse; private String enhed; private double pris; private int antal; private String lokation; static Statement stmt; //statement som bruges til at udføre kommandoer på databasen.
public static void opretVare(int vareNr, String beskrivelse, String enhed, double pris, int lagervare)throws Exception {
try { Statement stmt = Forbindelse.connection.createStatement(); stmt.executeUpdate("INSERT INTO vare VALUES ("+vareNr+", '"+beskrivelse+"', '"+enhed+"', "+pris+", "+lagervare+");"); } catch(Exception e) { System.out.print("\nVaren kunne ikke oprettes !!\nFindes højst sansynlig allerede\n"); } finally { System.out.print("\nVare blev oprettet"); } }
public static void sletVare(int vareNr) { try { Statement stmt = Forbindelse.connection.createStatement(); stmt.executeUpdate("DELETE FROM vare WHERE vareNr = "+vareNr+""); } catch(Exception e) { System.out.print("\nKunne ikke slette varen !\n"); } finally { System.out.print("Varenr "+vareNr+" Blev slettede"); } }
public static void retVare(int vareNr, String beskrivelse, String enhed, double pris, int lagervare) { try { Statement stmt = Forbindelse.connection.createStatement(); stmt.executeUpdate("UPDATE vare SET beskrivelse = '"+beskrivelse+"', enhed = '"+enhed+"', pris = "+pris+", lagervare = "+lagervare+" WHERE vareNr = '"+vareNr+"'"); } catch(Exception e) { System.out.print("\nVaren kunne ikke ændres !\n"); } finally { System.out.print("vareNr "+vareNr+" blev ændret til, beskrivelse = "+beskrivelse+", enhed = "+enhed+", pris = "+pris+", lagervare = "+lagervare+" WHERE vareNr = '"+vareNr+"'"); }
}
public void findVare(int vareNr, int antal) {
}
public void opdaterVareBeholdning(int vareNr, int antal, String lokation) {
}
public static int visVare(int vareNr) { int k = 0 ; ResultSet antal = null; try {
Statement stmt = Forbindelse.connection.createStatement(); antal = stmt.executeQuery("SELECT lagervare FROM vare WHERE VareNr = "+vareNr+""); } catch(Exception e) { System.out.print("\nVaren kunne ikke ændres !\n"); } finally { System.out.print("\nvareNr "+vareNr+" har en lagerbeholdning på ");
}
try { while (antal.next()) //der køres en while løkke i lige så lang tid som der er elementer { k = Integer.parseInt(antal.getString("lagervare"));//tager elmentet som ligger under VareNr og tilføjer til totalAntal } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.print(k); return k; }
Det der er det jeg vil kalde en "Manager/controller" klasse - den håndterer alle dine CRUD funktioner. Det jeg snakker om er et domæne-objekt som du kan kalde Vare.
Jeg vil ikke "flette" noget ind i din nuværende vare-klasse.
Du kalder bare domæneobjektet noget andet end Vare, f.eks. VareEnhed og giver den alle de egenskaber dine varer nu har i databasen (ligesom jeg var begyndt på i min Vare-klasse).
Dine metoder bliver så til noget a la:
public static void retVare(int vareNr, String beskrivelse, String enhed, double pris, int lagervare)... bliver til: public static void retVare(VareEnhed vare)...
public static void sletVare(int vareNr) bliver til: public static void sletVare(VareEnhed vare)...
public static void opretVare(int vareNr, String beskrivelse, String enhed, double pris, int lagervare) bliver til: public static void opretVare(Vare vare)...
Osv osv osv... (hvis du forstår)
Ovenstående må også betegnes som den "rigtige" måde at gøre det på - om ikke andet så den "objekt-orienterede" måde at gøre det på.
I den metode jeg lavede om tidligere skal du så bare ændre den til at returnere VareEnhed i stedet for Vare.
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.