IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Classe connexion base de données


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 117
    Points : 92
    Points
    92
    Par défaut Classe connexion base de données
    Bonjour,

    Je débute en programmation orientée objet et en Java.

    Je travaille sous Eclipse et je souhaite établir un connexion vers ma base de données SQL Server. Je souhaite qu'il n'y ait qu'un seul fichier (class) que j'importerais dans chacune de mes servlets.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package OutillageCentrale;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    public class ConOutillageCentrale {
     
        public static Connection ConOutillageCentrale = null;
        /**
         * @param args
         * @return 
         */
        public static Connection main(String[] args) {
     
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String url = "jdbc:sqlserver://{servername};"+"databaseName=OutillageCentrale;user={username};password={motdepasse}";
                ConOutillageCentrale = DriverManager.getConnection(url);
     
                if (ConOutillageCentrale != null) {
     
                }
            } catch (Exception e ) {
                System.out.println("Ca marche pas !!!");
            }
     
            return ConOutillageCentrale;
        }
    }
    Voici le code de ma servlet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package OutillageCentrale;
     
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import OutillageCentrale.ConOutillageCentrale;
    /**
     * Servlet implementation class Acceuil
     */
    public class Acceuil extends HttpServlet {
     
        private static final long serialVersionUID = 1L;
        public static final String VUEAcceuil = "/WEB-INF/lib/entete.jsp";
     
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
            try {
     
                //DOIS JE FAIRE CECI POUR APPEL MA VARIABLE ConOutillageCentrale?
                ConOutillageCentrale ConOutillageCentrale = new ConOutillageCentrale();
     
                //Création d'un objet Statement
                Statement state = ConOutillageCentrale.createStatement();
     
                //L'objet ResultSet contient le résultat de la requête SQL
                ResultSet result = state.executeQuery("SELECT * FROM NomControle;");
     
                //On récupère les MetaData
                ResultSetMetaData resultMeta = result.getMetaData();
                System.out.println("\n**********************************");
                //On affiche le nom des colonnes
                for(int i = 1; i <= resultMeta.getColumnCount(); i++)
                System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t *");
                System.out.println("\n**********************************");
     
            } catch ( Exception e ) {
                System.out.println("ERREUR");
            }
     
            this.getServletContext().getRequestDispatcher(VUEAcceuil).forward( request, response );
        }
     
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        }
    }
    Lors de la "//Création d'un objet Statement", Eclipse demande de créer la fonction createStatement() dans la classe ConOutillageCentrale. Je sais que c'est tout à fait normal mais pourquoi import java.sql.Statement; n'est pas reconnu ?

    Je comprends que j'utilise la classe ConOutillageCentrale et non la "variable" de connexion ConOutillageCentrale mais je ne sais pas comment rémédier à ce probleme.

    Rappel: ce que je veux faire exactement c'est utiliser ma classe ConOutillageCentrale dans toutes mes servlets.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu as pas mal de problèmes dans ton code.

    Le premier, c'est d'avoir un objet Connection statique. Les servlet peuvent être attaquées à plusieurs en même temps par plusieurs utilisateurs. Hors, l'objet Connnection n'est pas prévu pour être multi threadé => Il te faut une connection par requête http ! Autrement dit, dans chaque servlet, au niveau du doGet / doPost, il devra y avoir création d'une nouvelle connection (et close de cette connection à la fin).

    Pour continuer, c'est quoi ce main dans ta classe ConnectionOutillage quel est son but?

    Enfin, tu a créé une classe avec un champ qui porte le nom de la classe. Ca ne fait qu'amener à de la confusion dans ton code et dans ta compréhension des choses.

    Les conventions java sont que les champs dans les classes doivent commencer par une minuscule. Donc au final, ton code devrait plutot ressembler à ça:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class ConOutillageCentrale {
     
    	public Connection connection = null;
    	/**
    	 * @param args
    	 * @return 
    	 */
    	public ConOutillageCentrale () {
     
    		try {
    		    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		    String url = "jdbc:sqlserver://{servername};"+"databaseName=OutillageCentrale;user={username};password={motdepasse}";
    		    connection = DriverManager.getConnection(url);
     
    		} catch (Exception e ) { System.out.println("Ca marche pas !!!"); }
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		ConOutillageCentrale conOutillageCentrale = new ConOutillageCentrale();
    		try {
     
     
    			//Création d'un objet Statement
    			Statement state = conOutillageCentrale.connection.createStatement();
     
                             //L'objet ResultSet contient le résultat de la requête SQL
    			ResultSet result = state.executeQuery("SELECT * FROM NomControle;");
     
    			//On récupère les MetaData
    			ResultSetMetaData resultMeta = result.getMetaData();
     
    			System.out.println("\n**********************************");
    			//On affiche le nom des colonnes
    			for(int i = 1; i <= resultMeta.getColumnCount(); i++)
    			System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t *");
    	       System.out.println("\n**********************************");
     
     
    	}catch ( Exception e ) {   System.out.println("ERREUR");}
     
    		this.getServletContext().getRequestDispatcher( VUEAcceuil
    	     ).forward( request, response );
    	} finally {
                 conOutillageCentrale.connection.close();
            }
    Ceci dit, ce n'est pas trop comme ça qu'on travaille en général dans des conteneur web, on utilise des connection pool pour être plus performant. Voir la FAQ/tutoriels pour plus de détails

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 117
    Points : 92
    Points
    92
    Par défaut
    Merci tchize_,

    Je comprends mes erreurs et je te remercie beaucoup pour tes conseils.

    Perso je suis quelqu'un qui cherche à bien faire les choses (c'est la raison aussi pour laquelle je me suis mis en java) donc je me documenterai pour savoir ce qu'est les connection pool.

    Merci encore.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 117
    Points : 92
    Points
    92
    Par défaut
    Vu que j'ai poster mon code, je préfère vous poser une dernière question.

    Quelle est "la bonne façon" pour récupéré les informations ("resultset") depuis mon servlet pour l'afficher sur ma page jsp?

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. classe php de connexion base de donné
    Par miro1985 dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2009, 09h28
  2. Réponses: 5
    Dernier message: 07/04/2005, 14h12
  3. [Tomcat][Oracle] connexion base de donnes debutant....
    Par yogz dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/07/2004, 13h32
  4. [XMLRAD] Connexion Base de données Informix
    Par clisson dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/01/2003, 13h46
  5. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo