Weergegeven resultaten: 1 t/m 4 van 4
  1. #1
    Up-to-date  
    Geregistreerd
    12 May 2010
    Berichten
    10
    Bedankjes
    2
    Bedankt
    10 keer in 10 posts

    [Java Swing] Data in een JTable laden/ zoeken op voorkeuren

    Ik zit weer vast helaas. Sorry dat ik jullie hier bombardeer met al die vragen maar mijn project moet zondag af zijn en ik wil toch tenminste de helft van de punten halen

    Nu moet ik al de data die ik heb uit de tabellen kunnen opzoeken en inladen in een JTable. Ik heb nu dus de comboboxen met bv. de gemeenten. Als ik daar een gemeente uit kies en op zoek druk, moet hij alle stagestudenten die in de bedrijven in die gemeente op stage staan, tonen in de JTable.

    Ik heb gewoon geen flauw idee hoe ik daaraan begin. Doe ik dit met queries in de Data Acces klasse of laad ik eerste alles in de JTables en daarna deze de zoekacties laten behandelen? Als ik alleen al de preferentie van gemeenten kan vinden zou ik al blij zijn, en kan ik daar verder op borduren.

    Code:
    public class StudentFrame extends JFrame implements ActionListener {
    
        private Container content;
        private JPanel topLeft, topRight, bottomLeft, bottomRight;
        private JComboBox gemeentenBox, sectorBox, soortBox;
        private JTextField aantalVeld;
        private JButton zoekenButton;
        private String gemeente;
    
        private DAjstageLogin daLogin = null;
        private DAjstageBedrijf daBedrijf = null;
        private DAjstageGemeente daGemeente = null;
        private DAjstageKeuze daKeuze = null;
        private DAjstageSector daSector = null;
        private DAjstageSoort daSoort = null;
        private DAjstageStudent daStudent = null;
        private DAjstageOpdracht daOpdracht = null;
    
        public StudentFrame(DAjstageBedrijf daBedrijf, DAjstageKeuze daKeuze, DAjstageGemeente daGemeente, DAjstageSector daSector, DAjstageOpdracht daOpdracht, DAjstageSoort daSoort, DAjstageStudent daStudent, DAjstageLogin daLogin)
                        throws Exception {
    
            this.daGemeente = daGemeente;
            this.daSector = daSector;
            this.daOpdracht = daOpdracht;
            this.daStudent = daStudent;
            this.daKeuze = daKeuze;
            this.daLogin = daLogin;
            this.daSoort = daSoort;
    
            this.setLocation(150,150);
            setTitle("Welkom");
            setSize(1000,750);
            opbouwScherm();
            addWindowListener(new VensterHandler());
            setVisible(true);
            this.setResizable(false);
    
        }
    
    
        public void opbouwScherm(){
            content = getContentPane();
            content.setLayout(null);
    
            JComboBox gemeentenBox = new JComboBox(daGemeente.getjStageGemeente());
            gemeentenBox.insertItemAt("geen voorkeur", 0);
            JComboBox sectorBox = new JComboBox(daSector.getjStageSector());
            sectorBox.insertItemAt("geen voorkeur", 0);
            JComboBox soortBox = new JComboBox(daSoort.getjStageSoort());
            soortBox.insertItemAt("geen voorkeur", 0);
    
            JTextField aantalVeld = new JTextField();
    
            JButton zoekenButton = new JButton("Zoek");
            zoekenButton.addActionListener(this);
    
            JLabel gemeentenLabel = new JLabel("Locatie bedrijf:");
            JLabel aantalLabel = new JLabel("Werkzame informatici:");
            JLabel sectorLabel = new JLabel("Sector stagebedrijf:");
            JLabel soortLabel = new JLabel("Soort stage:");
    
            //comboboxen
            gemeentenBox.setBounds(5, 30, 150, 20);
            sectorBox.setBounds(160, 30, 325, 20);
            soortBox.setBounds(495, 30, 140, 20);
            aantalVeld.setBounds(625, 30, 135, 20);
    
            //labels
            gemeentenLabel.setBounds(5,10,120,20);
            sectorLabel.setBounds(160,10,120,20);
            soortLabel.setBounds(495,10,120,20);
            aantalLabel.setBounds(625,10,135,20);
    
            //buttons
            zoekenButton.setBounds(800,30,80,20);
    
            content.add(gemeentenBox);
            content.add(sectorBox);
            content.add(soortBox);
            content.add(aantalVeld);
            content.add(gemeentenLabel);
            content.add(sectorLabel);
            content.add(soortLabel);
            content.add(aantalLabel);
            content.add(zoekenButton);
    
        }
    
        public void actionPerformed(ActionEvent e) {
    
            gemeente = gemeentenBox.getSelectedItem()+"";
    
            System.out.println(daGemeente.getGemeenten(gemeente));
    
        }
    
        class VensterHandler extends WindowAdapter {
            public void windowClosing(WindowEvent e) {
                try {
                    System.exit(0);
                } catch (Exception err) {
                    JOptionPane.showMessageDialog(content, "Fout bij sluiten databank","Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    
    }
    Code:
    public class DAjstageGemeente {
    private Connection connection = null;
    
        public DAjstageGemeente (String url, String login, String password, String driver)
                throws ClassNotFoundException, SQLException
        {
            Class.forName(driver);
            connection = DriverManager.getConnection(url, login, password);
        }
        public void close() throws SQLException {
            if(connection != null) {
                connection.close();
            }
        }
    
    public Vector<jstageGemeente> getjStageGemeente() {
    
            Statement stmt = null;
            ResultSet rs = null;
            jstageGemeente gemeente = null;
            Vector <jstageGemeente> resultaat = new Vector<jstageGemeente>();
    
            try {
                stmt = connection.createStatement();
                rs = stmt.executeQuery("SELECT DISTINCT (gemeente), id, postcode FROM jstageGemeente GROUP BY gemeente");
    
                while (rs.next()) {
                    gemeente = new jstageGemeente();
                    gemeente.setId(rs.getInt(2));
                    gemeente.setPostcode(rs.getInt(3));
                    gemeente.setGemeente(rs.getString(1));
                    resultaat.add(gemeente);
                }
            }
            catch(Exception e) {
                e.printStackTrace();
            }
            finally
            { try {
                  if(stmt!=null) stmt.close();
                  if(rs!=null) rs.close();
              } catch(SQLException e){}
            }
            return resultaat;
        }
    Hieronder heb ik iets geprobeerd. Namelijk om de vector te vullen met String objecten. Helaas werkt dit niet goed, zoals verwacht natuurlijk. Ik kom te verwachten dat mijn code niet werkt ondertussen. Ik heb geprobeerd om de keuze in Netbeans af te drukken

    Code:
        public Vector getGemeenten(String gemeenten) {
            Vector result = new Vector();
            PreparedStatement stmt = null;
            ResultSet rs = null;
    
            try{
                stmt = connection.prepareStatement("SELECT gemeente FROM jstageGemeente WHERE gemeente = ?");
                stmt.setString(1, gemeente);
                rs = stmt.executeQuery ();
    
                while (rs.next()) {
                    Vector rijVector = new Vector();
                    rijVector.add(rs.getString(1));
                    result.add(rijVector);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                try {
                    if (stmt != null) stmt.close();
                    if (rs != null) rs.close();
                } catch(SQLException e){}
            }
            return result;
        }
    
    }
    Alvats bedankt

  2. De volgende gebruiker bedankt Subhero voor deze nuttige post:

    ultddave (13 May 2010)

  3. #2
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.492
    Bedankjes
    4.886
    Bedankt
    2.330 keer in 1.175 posts
    SELECT gemeente FROM jstageGemeente WHERE gemeente = ?
    Je moet goed begrijpen wat die SELECT doet.

    SELECT gemeente wilt zeggen dat je enkel de kolom gemeente gaat opvragen uit jstageGemeente.
    Als ik daar een gemeente uit kies en op zoek druk, moet hij alle stagestudenten die in de bedrijven in die gemeente op stage staan, tonen in de JTable.
    In de veronderstelling dat de tabel "jstagegemeente" de naam van de studenten bevat en de gemeente waar ze werken. Zou je dit moeten doen:
    SELECT naam, gemeente FROM jstageGemeente WHERE gemeente = ?
    Als je de naam en de gemeente wilt opvragen. Als je enkel de naam wilt hebben, moet je:
    SELECT naam FROM jstageGemeente WHERE gemeente = ?
    gebruiken.

    PS:
    Code:
        public Vector getGemeenten(String gemeenten) {
            Vector result = new Vector();
            PreparedStatement stmt = null;
            ResultSet rs = null;
    
            try{
                stmt = connection.prepareStatement("SELECT gemeente FROM jstageGemeente WHERE gemeente = ?");
                stmt.setString(1, gemeente);
                rs = stmt.executeQuery ();
    
                while (rs.next()) {
                    Vector rijVector = new Vector();
                    rijVector.add(rs.getString(1));
                    result.add(rijVector);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                try {
                    if (stmt != null) stmt.close();
                    if (rs != null) rs.close();
                } catch(SQLException e){}
            }
            return result;
        }
    Je maakt zelf nog een vector aan, terwijl er al 1 bestaat.

    En ik denk dat deze ook fout is: stmt.setString(1, gemeente);
    De parameter is gemeenten (meervoud). De variabele gemeente zal niet bestaan normaal gezien. (Tenzij ik iets over het hoofd heb gezien).

    In de functie die getGemeente aanroept, moet je die vector opvangen en doorlopen. (For lus bijvoorbeeld).

    Maar ik ken bijna niet zoveel van Netbeans en die tables etc in Java.

    Pseudocode:Vector resultaat = getGemeenten("Brussel");
    for(int i = 0; i <resultaat.size(); ++i)
    Tabel.addItem(resultaat[i]);

    Ik ken de juiste Java syntax niet daarvoor.

    Mvg,
    Dave
    Laatst gewijzigd door ultddave; 13 May 2010 om 15:56
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

  4. #3
    Erelid   carl's schermafbeelding
    Geregistreerd
    20 June 2006
    Locatie
    Halle/Gent
    Berichten
    2.402
    Bedankjes
    1.377
    Bedankt
    1.438 keer in 945 posts
    Ik weet niet wat dave aan het typen is, maar ik kan even kort samenvatten wat je moet doen

    Als je met een JTable werkt is het waarschijnlijk de bedoeling dat je je gegevens kan aanpassen ? Dan moet je met MVC (model view controller) werken.

    Je moet dan een tablemodel schrijven dat een lijst van student objecten op een correcte manier kan weergeven (defaulttablemodel implementeren en methodes overschrijven). En eventueel gebruik maken van het observer pattern om de gegevens in sync te houden (database - objecten).

    Het inlezen van alle data uit je database en dan pas filteren is ENORM slecht. Je sql host kan ide gegevens 10 keer sneller filteren dan java, waarin je zal moeten een sequentiele zoekactie uitvoeren en een heleboel objecten instantieren. (met kans op een stack overflow als je database echt groot is).

    Om preciezer te zijn zou een model van je database (relationeel model of een sql dump) handig zijn.

    PS: Ik ken het probleem wel maar in het vervolg niet zo lang wachten !
    Laatst gewijzigd door carl; 13 May 2010 om 15:57

  5. De volgende gebruiker bedankt carl voor deze nuttige post:

    ultddave (13 May 2010)

  6. #4
    Administrator   ultddave's schermafbeelding
    Geregistreerd
    24 June 2006
    Locatie
    Genk
    Berichten
    1.492
    Bedankjes
    4.886
    Bedankt
    2.330 keer in 1.175 posts
    Het inlezen van alle data uit je database en dan pas filteren is ENORM slecht.
    Inderdaad .

    En het bespaart je zoiezo heel wat werk om de database alles te laten doen. Een vector is trouwens ook niet echt geschikt voor te filteren wegens de lange tijd die nodig is om een element in het midden/vooraan van de vector te verwijderen.
    Dat vergt tijdscomplexiteit O( n ) als ik me niet vergis. Het laatste element verwijderen is O(1).

    mijn project moet zondag af zijn en ik wil toch tenminste de helft van de punten halen
    Tss :P. Op tijd beginnen eh .

    Mvg,
    Dave
    Laatst gewijzigd door ultddave; 13 May 2010 om 16:04
    "Friendship. It's the hardest thing in the world to explain. It's not something you learn in school. But if you haven't learned the meaning of friendship, you really haven't learned anything." ~ Muhammad Ali

Discussie informatie

Users Browsing this Thread

Momenteel bekijken 1 gebruikers deze discussie. (0 leden en 1 gasten)

Soortgelijke discussies

  1. [Java/SQL] Dubbels wegwerken uit data van database, en inladen in ComboBox
    Door Subhero in forum Webdevelopment & Programming
    Reacties: 11
    Laatste bericht: 13 May 2010, 13:19
  2. [Java Swing] Database data inladen in JComboBox geeft probleem
    Door Subhero in forum Webdevelopment & Programming
    Reacties: 1
    Laatste bericht: 12 May 2010, 20:52
  3. kan profiel niet laden
    Door God in forum Windows
    Reacties: 5
    Laatste bericht: 28 April 2008, 21:16
  4. Voorkeuren Firefox
    Door Castille in forum Internet
    Reacties: 2
    Laatste bericht: 3 January 2006, 22:34

Favorieten/bladwijzers

Favorieten/bladwijzers

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •