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

JDBC Java Discussion :

Pilote sql server introuvable


Sujet :

JDBC Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Pilote sql server introuvable
    Bonjour,j'ai créé un servlet et j'essaie de me connecter à une BD sql server 2005 mais j'ai l'erreur suivante:

    java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
    Apparemment le pilote est introuvable.Pourtant j'ai bien inséré le pilote en faisant ceci:
    bouton droit sur le projet-build path-configure build path-add external jar et je cherche le chemin du pilote et je clique sur ok.
    En fait j'ai créé un répertoire lib contenant le pilote,et j'ai mis le lib dans le projet.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
     
    public class ServletRec extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	private Database db=null;
     
        public ServletRec() {
            super();
     
        }
     
     
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doPost(request,response);
    	}
     
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html");
     
    		//récupération des informations
    		String email = request.getParameter("email");
    		String comment = request.getParameter("comment");
     
    		//connexion à la BD et enregistrement
    		 db = new Database();
    		 db.setPilote("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		 db.setConnection("jdbc:sqlserver://localhost:1433;databaseName=SmartSoftwares", "sa", "passer"); 
     
    		String requete="insert into suggestion(email,comment)values('"+email+"','"+comment+"')";
     
     
    		db.setPStatement(requete);
    		if(db.sendRequeteLMD()>0)
    		{
    			response.sendRedirect("index.html?param=ok");
    		}
    		else
    		{
    			response.sendRedirect("index.html?param=ko");
    		}
     
    	}
     
    }
    Pour info,le pilote n'est pas corrompu car je l'ai testé sur un autre projet JDBC et tout marche bien.J'arrive à me connecter à la BD et à insérer des données.
    Donc avec le projet concernant les servlets,je ne sais vraiment pas pourquoi j'arrive pas à charger le pilote.
    Au fait dans le code ci-dessus,vous avez du remarquer des méthodes telles que "setPilote","setConnection" etc.En fait c'est une classe nommée "DataBase" que j'ai créé permettant de charger le pilote,de me connecter à la BD.Voici la classe DataBase:



    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    import java.sql.*;
     
    import javax.swing.JOptionPane;
     
    public class Database {
     
    	private String pilote;
    	private Connection con;
    	private PreparedStatement pstmt;
    	private String url;
    	private String user;
    	private String pwd;
    	private String requete;
     
    	public Database(){
    		pilote=null;
    		con=null;
    		pstmt=null;
    		user=null;
    		pwd=null;
    		url=null;
    		requete=null;
    	}
     
    	//la methode qui charge le pilote
    	public void setPilote(String pilote){
    		this.pilote=pilote;
     
    		try {
    			Class.forName(this.pilote);
    		} catch (ClassNotFoundException e) {
    			JOptionPane.showMessageDialog(null,"Impossible de charger le pilote");
    		}
    	}
     
    	//la methode qui créée la connexion
    	public void setConnection(String url, String user, String pwd){
    		this.url=url;
    		this.user=user;
    		this.pwd=pwd;
     
    		try {
    			con=DriverManager.getConnection(this.url,this.user,this.pwd);
    		} catch (SQLException e) {
    			JOptionPane.showMessageDialog(null,"Impossible d'etablir la connexion");
    		}
    	}
     
    	//la methode qui créée le preparedstatement
    	public void setPStatement(String requete){
    		this.requete=requete;
     
    		try {
    			pstmt=con.prepareStatement(this.requete);
    		} catch (SQLException e) {
    			JOptionPane.showMessageDialog(null,"Impossible de créer le prepared statement");
    		}
    	}
     
    	//la methode qui envoit une requte d'interrogation
    	public ResultSet sendRequeteLID(){
    		ResultSet rs=null;
     
    		try {
    			rs=pstmt.executeQuery();
    		} catch (SQLException e) {
    			JOptionPane.showMessageDialog(null,"Requete d'interrogation échouée");
    		}
     
    		return rs;
    	}
     
    	//la methode qui envoit une requete de mise à jour
    	public int sendRequeteLMD(){
    		int ligne=0;
     
    		try {
    			ligne=pstmt.executeUpdate();
    		} catch (SQLException e) {
    			JOptionPane.showMessageDialog(null,"requete de mise à jour échouée");
    		}
     
    		return ligne;
    	}
     
    	//la mthode qui envoit une reque de definition de la base de données
    	public boolean sendRequeteLDD(){
    		boolean test=false;
     
    		try {
    			test=pstmt.execute();
    		} catch (SQLException e) {
    			JOptionPane.showMessageDialog(null,"Requete de definition échouée");
    		}
     
    		return test;
    	}
     
    	public PreparedStatement getPStmt(){
    		return pstmt;
    	}
     
    	public Connection getCon(){
    		return con;
    	}
     
     
     
     
     
    }

    Merci d'avance.

  2. #2
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    coucou

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ton message d'erreur vient d'une exécution en dehors de l'IDE ?
    Quel IDE utilises-tu, Eclipse, Netbeans ?

    Pour Eclipse, le plus simple consiste à créer un répertoire lib au même niveau que src, de coller le jar du driver dedans.
    Sur le jar, faire clic droit -> Build Path -> Add to Build Path

    Maintenant, pour une exécution en dehors de l'IDE, il va falloir paramétrer le fichier manifest.mf pour référencer les lib externes ou alors, avec Eclipse, créer un "Runnable Jar File" (option Export sur le projet)

  4. #4
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut
    Bonjour,
    Tu essayes de créer une servlet. Il faudrait donc que ton drivers soit dans un lib de l'application (ou du serveur d'application -Tomcat?/GlassFish?-).
    Généralement, j'utilise les datasources, et je dépose le ".jar" pour les accès BDD sous Tomcat\lib ou Tomcat\common\lib.
    Ci-après un petit tuto (la version Tomcat date un peu) qui ressemble à ce que je fais.

    http://christophej.developpez.com/tu...ee/pooltomcat/

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Damned, je n'avais pas tilté qu'il s'agissait d'une application web (à cause de JOptionPane...)

    Dans ce cas, il faut créer le répertoire lib dans WEB-INF et ça ira tout seul...

    Un commentaire tout de même, ta classe Database inclue l'objet Connection, ce qui n'est pas judicieux. Elle devrait juste s'occuper de centraliser l'acquisition d'une connexion et éventuellement de sa libération.
    Le plus facile à utiliser serait dans ce genre
    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
     
    public class Database 
    {
        private static String driver;
        private static String url;
        private static String user;
        private static String password;
        static
        {
            /*
             * Initialisation des paramètres (fichier properties ou autre...)
             */
            driver = ...;
            url = ...;
            user = ...;
            password = ...;
        }
     
        /*
         * Acquisition d'une connexion
         */
        public static Connection getConnection()
        {
            try
            {
                Class.forName(driver);
                return DriverManager.getConnection(url, user, password);
            }
            catch (Exception e)
            {
                ... on trace
            }
            return null;
        }
     
        /*
         * Libération de la connexion
         */
        public static void closeConnection(Connection connection)
        {
            try
            {
                if (connection != null) connection.close();
            }
            catch (Exception e)
            {
                ... on trace
            }
        }
    }
    Du coup, l'utilisation se résumerait à ceci (inutile d'avoir une instance de Database)
    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
     
    public void maMethode()
    {
        Connection connection = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
     
        try
        {
            connection = Database.getConnection();
            pstmt = connection.prepareStatement("...");
            rs = pstmt.executeQuery();
            while (rs.next())
            {
                ...
            }
        }
        catch (Exception e)
        {
            ...
        }
        finally
        {
            /*
             * On peut libérer les autres ressources ici, 
             * mais le fait de fermer la connexion libère les autres
             */
            Database.closeConnection(connection);
        }
    }
    A+

  6. #6
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Damned, je n'avais pas tilté qu'il s'agissait d'une application web (à cause de JOptionPane...)

    Dans ce cas, il faut créer le répertoire lib dans WEB-INF et ça ira tout seul...
    Merci beaucoup ca marche

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/07/2010, 18h32
  2. Réponses: 4
    Dernier message: 17/05/2010, 23h14
  3. Réponses: 6
    Dernier message: 06/04/2009, 14h57
  4. Pilote ODBC de SQL Server 2000
    Par repié dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/08/2006, 17h10
  5. Pilote JDBC pour SQL Server
    Par david71 dans le forum JDBC
    Réponses: 6
    Dernier message: 21/01/2005, 14h39

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