Problème connexion avec la Base de Donnés (Servlet)

Fermé
tounsii007 Messages postés 15 Date d'inscription samedi 29 octobre 2016 Statut Membre Dernière intervention 23 mai 2017 - Modifié par KX le 29/10/2016 à 19:52
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 31 oct. 2016 à 14:39
Bonsoir tous le monde,
j'ai essayé de faire une connexion avec une Base de données MICROSOFT ACCESS dans ma Servlet ... mais ça marche pas malheureusement

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Ridha
 */
@WebServlet(urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {

/**
* Processes requests for both HTTP GET and POST
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
* @throws java.sql.SQLException
* @throws java.lang.ClassNotFoundException
*/
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException, SQLException, ClassNotFoundException {
        response.setContentType("text/html;charset=UTF-8");
        try (
                PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet NewServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1> lecture de données  de la Base de données  <h1>");
        
            String driver ="sun.jdbc.odbc.JdbcOdbcDriver";

         Class.forName(driver); // l'éxecution du programme se bloque ici
            Connection conn = DriverManager.getConnection("jdbc:odbc:DB");        
           Statement statement = conn.createStatement();
String sql="Select * from Kunden" ; 
ResultSet  rs = statement.executeQuery(sql);
while (rs.next())
      out.println("lu");
   out.println("<h5> ID= "+rs.getString(1)+ "name "+rs.getString(2)+"</h5>");      
             out.println("</body>");
            out.println("</html>");
        }catch (SQLException sqq){sqq.getMessage();}
    }

c'est quoi le Problème d'après vous ? :)

merci d'avance

A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 oct. 2016 à 20:00
Bonjour,

D'une part le Class.forName ne devrait être fait qu'une seule fois dans tout le programme, par exemple dans la méthode init() de la servlet.
Il en va de même pour la connexion, ça ne sert à rien de créer une nouvelle connexion à la base de données à chaque requête, une connexion pour la servlet entière suffit.

D'autre part si ça a planté tu dois avoir le message d'erreur dans les logs du serveur, à moins que tu ne l'ai intercepté lors de l'appel à processRequest.
La raison étant sûrement que le jar du driver n'a pas été ajouté dans le classpath donc il ne peut pas charger la classe.

Remarque :
catch (SQLException sqq){sqq.getMessage();}
ne permet pas de savoir quelle est l'erreur, getMessage renvoie un String (potentiellement vide) donc à moins de l'afficher cette ligne ne sert à rien, il faudrait plutôt faire un sqq.printStackTrace(), ou utiliser un Logger.
Tu peux également ne pas faire de try/catch ici vu que tu throws déjà les SQLException au niveau de ta méthode.
0
tounsii007 Messages postés 15 Date d'inscription samedi 29 octobre 2016 Statut Membre Dernière intervention 23 mai 2017
29 oct. 2016 à 20:25
comment je résoudre alors le problème du fichier jar du Driver ? ? :(
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 oct. 2016 à 20:35
Je ne sais pas avec quelle version de Java tu codes, mais je sais que ODBC a été supprimé depuis Java 8, et que même dans les versions d'avant c'était mieux de pouvoir s'en passer, par exemple avec UCanAccess

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");
0
tounsii007 Messages postés 15 Date d'inscription samedi 29 octobre 2016 Statut Membre Dernière intervention 23 mai 2017
29 oct. 2016 à 21:06
j'aimerais bien changer ma base sur Oracle SQL Developer oubien sur MySQL SERVER pour éviter ce problème du Driver avec MICROSOFT ACCESS 2013 mais ça fonctionne pas sur ma machine et je ne sais pas pourquoi .

Est ce que pouvez m'aidez? par TeamViewer s'il est possible !

merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 oct. 2016 à 21:11
Je connais pas trop les installations des bases de données, mais d'un point de vue Java c'est toujours la même chose, tu ajoutes un driver dans ton classpath, tu initialises la classe et tu récupères la connexion. Peu importe ce qu'il y a derrière. Donc si Access fonctionne pas, prends du Oracle ou MySQL si tu veux, ça change rien.
0
tounsii007 Messages postés 15 Date d'inscription samedi 29 octobre 2016 Statut Membre Dernière intervention 23 mai 2017
Modifié par KX le 30/10/2016 à 14:08
En fait , j'ai eu un Problème lors de l'ajout de données dans la Base de Données (executeUpdate)


import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
* @author Ridha
*/
@WebServlet(urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {

    /**
* Processes requests for both HTTP GET and POST
* methods.
     *
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
* @throws java.sql.SQLException
* @throws java.lang.ClassNotFoundException
*/
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException, SQLException, ClassNotFoundException {
        response.setContentType("text/html;charset=UTF-8");
      
                PrintWriter out = response.getWriter();
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet NewServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1> lecture de la Base de données  <h1>");
       
                    
             
DB maBase = new DB();  
out.println("<h1> crèation de la connexion avec la BD  <h1>");

            int id = 145;
            String ch1= "Ridha";
            String ch2= "abd";
            String ch3= "017856";
String sql="INSERT INTO Kunden(id,name,vorname,tel) VALUES ("+ id +","+ch1+","+ch2+","+ch3+")" ;  
out.println("<h1> phase d'ajout de données <h1>");

   maBase.st.executeUpdate(sql);    // L’exécution se bloque ici 
   out.println("<h1> ajout avec succès <h1>");
   
   maBase.st.close();
   
   maBase.con.close(); 
       
            out.println("</body>");

            out.println("</html>");
        
    }



La Classe DB qui sert à la connexion avec la Base de données et la suivante :

import java.sql.*;
/*
* @author Ridha
*/
public class DB {
   Connection con=null;
   Statement st=null;
  
   
    /**
     *
* @throws java.lang.ClassNotFoundException
* @throws java.sql.SQLException
*/
    public  void DB() throws ClassNotFoundException, SQLException{

   String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
         Class.forName(driver);
         
        con = DriverManager.getConnection("jdbc:odbc://d:/DB.mdb");  System.out.println("<h1> ***  <h1>");
          st= con.createStatement(); System.out.println("<h1> ***  <h1>"); 
        
          
}
}

Est ce qu'il y a une Solution pour éviter ce problème lors de l'ajout ?
0