1. #1
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9

    Java: Too many connections

    We moeten voor school een website maken waar je spelletjes kan uitlenen. Nu dacht ik eens een functie toe te voegen om een volgend en vorig spel makkelijk op te halen. Dit werkt allemaal goed en wel enkel krijg ik soms volgende error. (dit is trouwens random, niet altijd bij hetzelfde spel ofzo).

    Code:
    type Exception report
    
    message
    
    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
    
    exception
    
    javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    root cause
    
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.
    Nu heb ik al wat zitten googlen naar deze error, ik word er alleen niet wijzer van..

    Zo roep ik het volgende of het vorige spel op:
    PHP Code:
    <p>
                                <
    a href="ManageServlet?spelNrVorige=<%=detailsSpel.getNr() -1 %>">&larrVorig zoekertje</a> |
                                <
    a href="ManageServlet?spelNrVolgende=<%=detailsSpel.getNr() + 1 %>">Volgend zoekertje &rarr;</a>
     </
    p
    Hier verwerk ik het:
    PHP Code:
    if (spelNrVorige != null) {
                
    //details pagina
                
    int spelNr Integer.parseInt(spelNrVorige);

                
    int maxNummer daspel.getMaxNummer();

                if (
    spelNr == 0) {
                    
    spelNr maxNummer;
                }

                
    Spel spel daspel.getSpel(spelNr);
                
    Aard aard daaard.getAard(spel.getAardnr());
                
    Moeilijkheid moeilijkheid damoeilijkheid.getMoeilijkheid(spel.getMoeilijkheidsNr());

                
    request.setAttribute("detailsAard"aard);
                
    request.setAttribute("detailsMoeilijkheid"moeilijkheid);
                
    request.setAttribute("detailsSpel"spel);

                
    rd request.getRequestDispatcher("overzicht.jsp");
            } else if (
    spelNrVolgende != null) {
                
    //details pagina
                
    int spelNr Integer.parseInt(spelNrVolgende);

                
    int maxNummer daspel.getMaxNummer();

                if (
    spelNr == maxNummer) {
                    
    spelNr 0;
                }

                
    Spel spel daspel.getSpel(spelNr);
                
    Aard aard daaard.getAard(spel.getAardnr());
                
    Moeilijkheid moeilijkheid damoeilijkheid.getMoeilijkheid(spel.getMoeilijkheidsNr());

                
    request.setAttribute("detailsAard"aard);
                
    request.setAttribute("detailsMoeilijkheid"moeilijkheid);
                
    request.setAttribute("detailsSpel"spel);

                
    rd request.getRequestDispatcher("overzicht.jsp");
            } 
    Ik denk dat het probleem zich voordoet bij het 'maxnummer'.. Dit is de methode om maxnummer op te halen:
    PHP Code:
    public int getMaxNummer() {
            
    int nummer 0;
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select nr from spel order by nr desc");

                if(
    resultSet.first()){
                    
    nummer resultSet.getInt(1);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            return 
    nummer;
        } 
    Is er iemand hier zo vriendelijk om dit eens te bekijken? Alvast bedankt! Indien u meer code nodig hebt zal ik het hier posten!

    Gr mam

    edit: ik heb net eens een "JOptionPane.showMessageDialog(null, "statement closed");" in de finally block toegevoegd. Dat blijkt toch normaal te werken? Grrr, ik denk dat het probleem dus niet echt bij mijn code zit? Eerder bij een of andere instelling? Ookal heb ik niets moeten instellen over connecties ofzo?
    Last edited by Dieterg; 02-05-2011 at 19:10.
    -
    no votes  

  2. #2
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    Je opent waarschijnlijk telkens nieuwe connecties zonder deze te sluiten. Maar er is te weinig code om dat met zekerheid te kunnen zeggen.
    “In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
    PSN: Cycloon - Final Fantasy XIV: A realm reborn character
    no votes  

  3. #3
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9
    Cycloon ik ben elke methode afgegaan om dit te controleren, alle klassen die ik heb zal ik hier eens pasten:
    PHP Code:
    public class DAAard {

        private 
    Connection connection null;

        public 
    DAAard(String urlString loginString passwordString driverthrows ClassNotFoundExceptionSQLException {
            Class.
    forName(driver);
            
    connection DriverManager.getConnection(urlloginpassword);
        }

        public 
    void close() throws SQLException {
            if (
    connection != null) {
                
    connection.close();
            }
        }

        public 
    ArrayList<AardgetAlleAard() {
            
    ArrayList<Aardresultaat = new ArrayList<Aard>();
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select * from aard");

                
    //resultaat opvullen d.m.v. de resultaten in de resultset
                
    while (resultSet.next()) {
                    
    Aard aard = new Aard();
                    
    aard.setNr(resultSet.getInt(1));
                    
    aard.setBeschrijving(resultSet.getString(2));
                    
    resultaat.add(aard);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                    if (
    statement != null) {
                        
    statement.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return resultaat;
        }

        public 
    Aard getAard(int nr) {
            
    Aard aard null;
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                
    //prepared statement om sql injection te voorkomen
                
    statement connection.prepareStatement("SELECT * FROM aard WHERE nr = ?");
                
    statement.setInt(1nr);
                
    resultSet statement.executeQuery();
                if (
    resultSet.first()) {
                    
    aard = new Aard();
                    
    aard.setNr(resultSet.getInt(1));
                    
    aard.setBeschrijving(resultSet.getString(2));
                }
            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return aard;
        }

        public 
    Aard getAardNummer(String beschrijving) {
            
    Aard aard null;
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                
    //prepared statement om sql injection te voorkomen
                
    statement connection.prepareStatement("SELECT * FROM aard WHERE beschrijving = ?");
                
    statement.setString(1beschrijving);
                
    resultSet statement.executeQuery();
                if (
    resultSet.first()) {
                    
    aard = new Aard();
                    
    aard.setNr(resultSet.getInt(1));
                    
    aard.setBeschrijving(resultSet.getString(2));
                }
            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return aard;
        }
    }

    public class 
    DALogin {

        private 
    Connection connection null;

        public 
    DALogin(String urlString loginString passwordString driverthrows ClassNotFoundExceptionSQLException {
            Class.
    forName(driver);
            
    connection DriverManager.getConnection(urlloginpassword);
        }

        public 
    void close() throws SQLException {
            if (
    connection != null) {
                
    connection.close();
            }
        }

        public 
    ArrayList<LogingetAlleLogin() {
            
    ArrayList<Loginresultaat = new ArrayList<Login>();
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select * from login");

                
    //resultaat opvullen d.m.v. de resultaten in de resultset
                
    while (resultSet.next()) {
                    
    Login login = new Login();
                    
    login.setNr(resultSet.getInt(1));
                    
    login.setNaam(resultSet.getString(2));
                    
    login.setPasswoord(resultSet.getString(3));
                    
    login.setAutoriteitNiveau(resultSet.getString(4));
                    
    login.setLenernr(resultSet.getInt(5));
                    
    resultaat.add(login);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                    if (
    statement != null) {
                        
    statement.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return resultaat;
        }

        public 
    Login getLogin(int nr) {
            
    Login login null;
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                
    //prepared statement om sql injection te voorkomen
                
    statement connection.prepareStatement("SELECT * FROM login WHERE nr = ?");
                
    statement.setInt(1nr);
                
    resultSet statement.executeQuery();
                if (
    resultSet.first()) {
                    
    login = new Login();
                    
    login.setNr(resultSet.getInt(1));
                    
    login.setNaam(resultSet.getString(2));
                    
    login.setPasswoord(resultSet.getString(3));
                    
    login.setAutoriteitNiveau(resultSet.getString(4));
                    
    login.setLenernr(resultSet.getInt(5));
                }
            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return login;
        }
    }
    package be.khk.lesson.dataaccess;

    import java.util.*;
    import java.sql.*;
    import be.khk.lesson.beans.*;

    public class 
    DAMoeilijkheid {

        private 
    Connection connection null;

        public 
    DAMoeilijkheid(String urlString loginString passwordString driverthrows ClassNotFoundExceptionSQLException {
            Class.
    forName(driver);
            
    connection DriverManager.getConnection(urlloginpassword);
        }

        public 
    void close() throws SQLException {
            if (
    connection != null) {
                
    connection.close();
            }
        }

        public 
    ArrayList<MoeilijkheidgetAlleMoeilijkheid() {
            
    ArrayList<Moeilijkheidresultaat = new ArrayList<Moeilijkheid>();
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select * from moeilijkheid");

                
    //resultaat opvullen d.m.v. de resultaten in de resultset
                
    while (resultSet.next()) {
                    
    Moeilijkheid moeilijkheid = new Moeilijkheid();
                    
    moeilijkheid.setNr(resultSet.getInt(1));
                    
    moeilijkheid.setBeschrijving(resultSet.getString(2));
                    
    resultaat.add(moeilijkheid);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                    if (
    statement != null) {
                        
    statement.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return resultaat;
        }

        public 
    Moeilijkheid getMoeilijkheid(int nr) {
            
    Moeilijkheid moeilijkheid null;
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                
    //prepared statement om sql injection te voorkomen
                
    statement connection.prepareStatement("SELECT * FROM moeilijkheid WHERE nr = ?");
                
    statement.setInt(1nr);
                
    resultSet statement.executeQuery();
                if (
    resultSet.first()) {
                    
    moeilijkheid = new Moeilijkheid();
                    
    moeilijkheid.setNr(resultSet.getInt(1));
                    
    moeilijkheid.setBeschrijving(resultSet.getString(2));
                }
            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return moeilijkheid;
        }
    }

    public class 
    DASpel {

        private 
    Connection connection null;

        public 
    DASpel(String urlString loginString passwordString driverthrows ClassNotFoundExceptionSQLException {
            Class.
    forName(driver);
            
    connection DriverManager.getConnection(urlloginpassword);
        }

        public 
    void close() throws SQLException {
            if (
    connection != null) {
                
    connection.close();
            }
        }

        public 
    ArrayList<SpelgetAlleSpel() {
            
    ArrayList<Spelresultaat = new ArrayList<Spel>();
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select * from spel");

                
    //resultaat opvullen d.m.v. de resultaten in de resultset
                
    while (resultSet.next()) {
                    
    Spel spel = new Spel();
                    
    spel.setNr(resultSet.getInt(1));
                    
    spel.setNaam(resultSet.getString(2));
                    
    spel.setUitgever(resultSet.getString(3));
                    
    spel.setAuteur(resultSet.getString(4));
                    
    spel.setJaarUitgifte(resultSet.getInt(5));
                    
    spel.setLeeftijd(resultSet.getString(6));
                    
    spel.setMinSpelers(resultSet.getInt(7));
                    
    spel.setMaxSpelers(resultSet.getInt(8));
                    
    spel.setAardnr(resultSet.getInt(9));
                    
    spel.setSpeelDuur(resultSet.getString(10));
                    
    spel.setMoeilijkheidsNr(resultSet.getInt(11));
                    
    spel.setPrijs(resultSet.getDouble(12));
                    
    spel.setAfbeelding(resultSet.getString(13));
                    
    resultaat.add(spel);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                    if (
    statement != null) {
                        
    statement.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return resultaat;
        }

        public 
    Spel getSpel(int nr) {
            
    Spel spel null;
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                
    //prepared statement om sql injection te voorkomen
                
    statement connection.prepareStatement("SELECT * FROM spel WHERE nr = ?");
                
    statement.setInt(1nr);
                
    resultSet statement.executeQuery();
                if (
    resultSet.first()) {
                    
    spel = new Spel();
                    
    spel.setNr(resultSet.getInt(1));
                    
    spel.setNaam(resultSet.getString(2));
                    
    spel.setUitgever(resultSet.getString(3));
                    
    spel.setAuteur(resultSet.getString(4));
                    
    spel.setJaarUitgifte(resultSet.getInt(5));
                    
    spel.setLeeftijd(resultSet.getString(6));
                    
    spel.setMinSpelers(resultSet.getInt(7));
                    
    spel.setMaxSpelers(resultSet.getInt(8));
                    
    spel.setAardnr(resultSet.getInt(9));
                    
    spel.setSpeelDuur(resultSet.getString(10));
                    
    spel.setMoeilijkheidsNr(resultSet.getInt(11));
                    
    spel.setPrijs(resultSet.getDouble(12));
                    
    spel.setAfbeelding(resultSet.getString(13));
                }
            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return spel;
        }

        
    //zoekresultaten
        
    public ArrayList<SpelgetSpelZoeken(String naamdouble prijsString auteurString uitgeverint aard) {
            
    ArrayList<Spelresultaat = new ArrayList<Spel>();
            
    PreparedStatement statement null;
            
    ResultSet resultSet null;

            try {
                if (
    naam.equals("") == false && auteur.equals("") == false && uitgever.equals("") == false && prijs != -&& aard != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.uitgever like ? and spel.auteur like ? and spel.prijs <= ? and spel.aardnr.nr = ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "1");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' uitgever '%');
                    
    statement.setString(3'%' auteur '%');
                    
    statement.setDouble(4prijs);
                    
    statement.setInt(5aard);

                    
    //selecteren als prijs niet is ingevuld..
                
    } else if (aard != -&& naam.equals("") == false && auteur.equals("") == false && uitgever.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.auteur like ? and spel.uitgever like ? and spel.aardnr = ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "2");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' auteur '%');
                    
    statement.setString(3'%' uitgever '%');
                    
    statement.setInt(4aard);

                    
    //selecteren als uitgever niet is ingevuld
                
    } else if (aard != -&& naam.equals("") == false && auteur.equals("") == false && prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.auteur like ? and spel.prijs <= ? and aard.beschrijving like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "3");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' auteur '%');
                    
    statement.setDouble(3prijs);
                    
    statement.setInt(4aard);

                    
    //selecteren als auteur niet is ingevuld
                
    } else if (aard != -&& naam.equals("") == false && auteur.equals("") == false && prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.uitgever like ? and spel.prijs <= ? and aard.beschrijving like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "4");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' uitgever '%');
                    
    statement.setDouble(3prijs);
                    
    statement.setInt(4aard);

                    
    //selecteren als aard niet is ingevuld
                
    } else if (auteur.equals("") == false && naam.equals("") == false && auteur.equals("") == false && prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.uitgever like ? and spel.prijs <= ? and spel.auteur like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "5");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' uitgever '%');
                    
    statement.setDouble(3prijs);
                    
    statement.setString(4'%' auteur '%');

                    
    //selecteren als enkel naam en uitgever is ingevuld
                
    } else if (naam.equals("") == false && uitgever.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.uitgever like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "6");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2'%' uitgever '%');

                    
    //selecteren als enkel auteur en uitgever is ingevuld
                
    } else if (auteur.equals("") == false && uitgever.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.auteur like ? and spel.uitgever like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "7");
                    
    statement.setString(1'%' auteur '%');
                    
    statement.setString(2'%' uitgever '%');

                    
    //selecteren als prijs en auteur is ingevuld
                
    } else if (auteur.equals("") == false && prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.auteur like ? and spel.prijs <= ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "8");
                    
    statement.setString(1'%' auteur '%');
                    
    statement.setDouble(2prijs);

                    
    //selecteren als prijs en aard is ingevuld
                
    } else if (aard != -&& prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where aard.beschrijving like ? and spel.prijs <= ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "9");
                    
    statement.setInt(1aard);
                    
    statement.setDouble(2prijs);

                    
    //selecteren als naam en aard is ingevuld
                
    } else if (aard != -&& naam.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where aard.beschrijving like ? and spel.naam like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "10");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2naam);

                    
    //selecteren als naam en aard is ingevuld
                
    } else if (aard != -&& auteur.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where aard.beschrijving like ? and spel.auteur like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "11");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setString(2auteur);

                    
    //selecteren als prijs en naam is ingevuld
                
    } else if (auteur.equals("") == false && prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and spel.prijs <= ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "12");
                    
    statement.setString(1'%' naam '%');
                    
    statement.setDouble(2prijs);

                    
    //enkel aard
                
    } else if (aard != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.aardnr = ? and aard.nr = spel.aardnr");
                    
    //JOptionPane.showMessageDialog(null, "13");
                    
    statement.setInt(1aard);
                    
    //enkel auteur
                
    } else if (auteur.equals("") == false) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.auteur like ? and spel.aardnr = aard.nr");
                    
    //JOptionPane.showMessageDialog(null, "14");
                    
    statement.setString(1'%' auteur '%');

                    
    //enkel uitgever
                
    } else if (!uitgever.equals("")) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.uitgever like ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "15");
                    
    statement.setString(1'%' uitgever '%');

                    
    //enkel naam
                
    } else if (!naam.equals("")) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.naam like ? and aard.nr = spel.nr");
                    
    // JOptionPane.showMessageDialog(null, "16");
                    
    statement.setString(1'%' naam '%');

                    
    //enkel prijs
                
    } else if (prijs != -1) {
                    
    statement connection.prepareStatement("select spel.nr, spel.naam, spel.uitgever, spel.auteur, spel.jaar_Uitgifte, spel.leeftijd, spel.min_Spelers, spel.max_Spelers, spel.aardnr, spel.speelduur, spel.moeilijkheidNr, spel.prijs, spel.afbeelding from spel, aard where spel.prijs <= ? and aard.nr = spel.nr");
                    
    //JOptionPane.showMessageDialog(null, "17");
                    
    statement.setDouble(1prijs);

                    
    //niets
                
    } else {
                    
    //JOptionPane.showMessageDialog(null, "18");
                    
    statement connection.prepareStatement("select * from spel");
                }

                
    resultSet statement.executeQuery();

                
    //resultaat opvullen d.m.v. de resultaten in de resultset
                
    while (resultSet.next()) {
                    
    Spel spel = new Spel();
                    
    spel.setNr(resultSet.getInt(1));
                    
    spel.setNaam(resultSet.getString(2));
                    
    spel.setUitgever(resultSet.getString(3));
                    
    spel.setAuteur(resultSet.getString(4));
                    
    spel.setJaarUitgifte(resultSet.getInt(5));
                    
    spel.setLeeftijd(resultSet.getString(6));
                    
    spel.setMinSpelers(resultSet.getInt(7));
                    
    spel.setMaxSpelers(resultSet.getInt(8));
                    
    spel.setAardnr(resultSet.getInt(9));
                    
    spel.setSpeelDuur(resultSet.getString(10));
                    
    spel.setMoeilijkheidsNr(resultSet.getInt(11));
                    
    spel.setPrijs(resultSet.getDouble(12));
                    
    spel.setAfbeelding(resultSet.getString(13));
                    
    resultaat.add(spel);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                    if (
    statement != null) {
                        
    statement.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            
    //return
            
    return resultaat;
        }

        public 
    int getMaxNummer() {
            
    int nummer 0;
            
    Statement statement null;
            
    ResultSet resultSet null;

            try {
                
    statement connection.createStatement();
                
    resultSet statement.executeQuery("select nr from spel order by nr desc");

                if(
    resultSet.first()){
                    
    nummer resultSet.getInt(1);
                }

            } catch (
    Exception e) {
                
    e.printStackTrace();
            } finally {
                try {
                    if (
    statement != null) {
                        
    statement.close();
                    }
                    if (
    resultSet != null) {
                        
    resultSet.close();
                    }
                } catch (
    SQLException e) {
                }
            }

            return 
    nummer;
        }

    Zoals je kan zien sluit ik elke methode af met een finally om de connecties te sluiten..

    edit: kan je misschien ergens zien hoeveel connections er open staan? Zodat ik dat eens in een messagebox kan printen ofzo?
    Last edited by Dieterg; 02-05-2011 at 19:35.
    -
    no votes  

  4. #4
    NeverwinterX's Avatar
    Registered
    27/08/04
    Location
    Leuven
    Posts
    930
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    11/38
    Je maakt bij elke nieuwe DAAard, DALogin etc een nieuwe connectie. Een database ondersteunt maar een bepaald aantal connecties tegelijk. Ofwel moet je meer connecties expliciet sluiten, ofwel meer connecties toelaten op de database ofwel connectie pooling toepassen.
    no votes  

  5. #5
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9
    Quote Originally Posted by NeverwinterX View Post
    This quote is hidden because you are ignoring this member. Show
    Je maakt bij elke nieuwe DAAard, DALogin etc een nieuwe connectie. Een database ondersteunt maar een bepaald aantal connecties tegelijk. Ofwel moet je meer connecties expliciet sluiten, ofwel meer connecties toelaten op de database ofwel connectie pooling toepassen.
    Maar dit probleem komt pas voor na bv. 30x op volgend zoekertje te duwen. De connectie wordt toch telkens terug gesloten? Dus als hij de eerste keer toelaat om 5x tegelijkertijd te connecten zou hij dat na de 30ste keer toch ook moeten doen? Hij gaat dus bv 30 langs manageservlet en dan inneens geeft hem die error. Soms is het ook al sneller, soms duurt het wat langer..
    -
    no votes  

  6. #6

    Registered
    22/10/02
    Location
    Mechelen
    Posts
    570
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    1/4
    We hebben jouw domein code niet, en ik vind ook je entry point niet terug. In elk geval close je de statement en resultset correct, maar volgens mij max je je connecties uit wanneer je 100 van je "DA..." classes hebt geïnstantieerd. Deze classes beschikken wel degelijk over een "close()" methode maar het is natuurlijk al direct mogelijk dat je ergens in je code in een aantal van zulke objecten vergeet je close() methode aan te roepen op het juiste moment.
    Daarboven kan het ook zijn dat de situatie zich voordoet waarbij je 100 DA objecten hebt in de heap die effectief ook niet hun connectie hoeven te sluiten en je dus van "nature" uit je connecties uit maxt.

    Ik noem hier 100 omdat dit de default is van MySQL. Het kan nu ook wel 150 zijn, afhangend van je versie. AFAIK is 150 eigenlijk de default bij de nieuwere versies van MySQL.

    Je kan gebruik maken van de MySQL Monitor, daar in de prompt:
    "show processlist;"
    vragen.
    Last edited by Wolf2000me; 02-05-2011 at 19:52. Reason: grammar ^^
    Asus Maximus Formula X38 (Rampage BIOS)
    Intel Q6600 @ 3700Mhz, Asus Geforce GTX 680
    Win7 / Ubuntu, Intel SSD 520 2x120Gb RAID 0
    Custom Watercooling
    no votes  

  7. #7
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9
    @wolf, dat is precies een beetje chinees voor mij :-).. Ik roep idd nerges zelf een close() methode op.

    Nu heb ik volgende code is toegevoegd in me DASpel
    PHP Code:
    public void close() throws SQLException {
            if (
    connection != null) {
                
    connection.close();
                
    JOptionPane.showMessageDialog(null,"daspelClose");
            }
        } 
    Als ik dan men project sluit komt er zo inneens na 5min. die messagebox.. Is dat normaal? Of zou het normaal al veel sneller uit zen eigen moeten sluiten? Kan ik deze methode zelf aanroepen zodat ik het handmatig sluit?
    -
    no votes  

  8. #8
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9
    Bedankt allemaal, ik het het probleem ondertussen kunnen oplossen door Destory() aan te roepen voor dat ik de requestdispatcher forward :-)!
    -
    no votes  

  9. #9

    Registered
    27/01/11
    Location
    Antwerpen
    Posts
    80
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/4
    Voor de duidelijkheid : de reden waarom je vroeger pas na een tijd problemen had (of pas na een tijd die message box zag), was omdat je connecties toen pas gesloten werden nadat je objecten door de garbage collector opgekuist werden (waardoor de connecties mee dicht gingen). Dit kan je dus verhelpen door zelf je connecties te sluiten.

    Maar de manier waarop je je database access doet is toch niet ideaal hoor, nu gaat het misschien nog, maar in een groter project ga je echt wel in de problemen komen, indien niet door bugs dan toch tenminste door onoverzichtelijkheid.
    Het is beter om je "business objects" en je database access strict gescheiden te houden.
    Volgende uitleg is wellicht complexer dan je voorlopig nodig hebt, maar je kan er alvast de standaard terminologie vinden om meer informatie te kunnen zoeken (en vragen stellen mag natuurlijk ook altijd
    Core J2EE Patterns - Data Access Object
    no votes  

  10. #10
    Dieterg's Avatar
    Registered
    08/01/05
    Location
    Turnhout
    Posts
    1,182
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    9/9
    Bedankt voor de link kim, ik ga het zeker eens bekijken! Het spijtige is dat we van onze docent op bovenstaande manier moeten werken. Dus dat zal iets voor in mijn vrije tijd zijn!
    -
    no votes  

  11. #11

    Registered
    27/01/11
    Location
    Antwerpen
    Posts
    80
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/4
    Afhankelijk van hoe strikt de regels van je docent zijn, kan je misschien de code iets mooier maken zonder al te ingrijpende veranderingen. Zulke verbeteringen zijn natuurlijk niet noodzakelijk de moeite in een klein project dat je achteraf niet meer onderhoudt, maar als je voldoende tijd en goesting hebt is het natuurlijk wel handig om de juiste gewoontes te oefenen.

    Je kan bvb al je data access klasses laten afleiden van een basis data access klasse, je database properties (url, login, ...) static maken in die basis klasse, en een protected method getConnection toevoegen die telkens een nieuwe connectie aanmaakt met die properties. En dan in al je data access methodes telkens via die methode een connectie aanmaken, en die in je finally block op het einde terug sluiten. Je kan eventueel ook een close methode toevoegen die een resultset, statement, en connectie meekrijgt, en die alle 3 sluit (voor zover ze niet null zijn), in een try-catch block natuurlijk.
    Op die manier spaar je wat duplicate code uit, en beperk je de tijd dat je connecties open zijn tot het minimum.

    Het is meestal ook niet zo'n goed idee om exceptions zomaar te catchen en dan enkel maar te loggen, behalve als er effectief geen probleem is. Maar een SQLException die optreedt als je data probeert op te halen is meestal wel een probleem. Aangezien je die fout niet kan herstellen, en wellicht toch verderop een NullPointerException zou krijgen, is het wellicht best om ook een nieuwe RuntimeException (of eigen specifieke afgeleide klasse) te throwen (met natuurlijk die SQLException als parameter). Op die manier krijg je betere stacktraces (zeker relevant als je op termijn je error-afhandeling wat zou gaan centraliseren).

    Het gebruik van scriptlets in JSPs wordt over het algemeen ook afgeraden. In je voorbeeld gebruik je het enkel om een variabele te tonen, wat natuurlijk niet zo erg is, maar sommige mensen komen snel in de verleiding om al te veel logica in zo'n scriptlets te steken, wat de onderhoudbaarheid niet ten goede komt.
    Als alternatief wordt meestal JSTL aangeraden, dat beperktere mogelijkheden heeft, maar wel voldoende voor de dingen die geen kwaad kunnen. Bovendien krijg je (met de meeste gangbare tools) betere error-checking, code completion, ...

    En bovenal, have fun, dat is nog altijd het belangerijkste
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in