Problème connexion avec la Base de Donnés (Servlet)
tounsii007
Messages postés
17
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
c'est quoi le Problème d'après vous ? :)
merci d'avance
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
1 réponse
-
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.-
-
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"); -
-
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.
-
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 ?
-