2010-12-08 3 views
0

J'essaie de créer une application de réservation en ligne pour un restaurant. Un fichier html appelle une servlet. Cette servlet utilise une base de données MSSQL pour suivre les réservations. Le problème est que la servlet lève une exception en essayant de se connecter à la base de données (la méthode getMessage() renvoie ceci: "com.microsoft.jdbc.sqlserver.SQLServerDriver"). J'ai inclus msbase.jar, mssqlserver.jar et msutil.jar pour le pilote jdbc. Je l'ai fait de cette façon chaque fois que j'ai utilisé MSSQL et cela a toujours fonctionné Y at-il quelque chose d'autre que je dois faire pour obtenir une servlet pour se connecter à MSSQL?ne peut pas se connecter à la base de données servlet cu mssql

Voici le code servlet`s:

public class AddReservation extends HttpServlet{ 
    public void doGet(HttpServletRequest cerere, HttpServletResponse raspuns) 
       throws ServletException, IOException{ 
    PrintWriter out = raspuns.getWriter(); 
    String nume,zi,luna,an,data,ora,minute; 
    //get parameters from html 
    raspuns.setContentType("text/html"); 
    out.println("<HTML><HEAD></HEAD><BODY>"); 
    if(nume.equals("")||zi.equals("")||luna.equals("")||an.equals("")||ora.equals("")||minute.equals("")){ 
     out.println("<H3>NU S-AU COMPLETAT TOATE CAMPURILE</H3>"); 
    } 
    else{ 
     try{ 
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
     Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://LAPTOP-TITI;DatabaseName=Restaurant_Servlet","sa","pass313307"); 
     Statement st = con.createStatement(); 
     data = zi+"/"+luna+"/"+an; 
     ora = ora +":"+minute; 
     ResultSet rs; 
     rs = st.executeQuery("select count(*) from Rezervari where Data ='"+data+"' and Ora ='"+ora+"'"); 
     rs.next(); 
     int n = rs.getInt(1); 
     if(n==2){ 
      out.println("<H3>NU EXISTA LOCURI LIBERE</H3>"); 
     } 
     else{//add to db 
      st.executeUpdate("insert into Rezervari(Nume, Data, Ora) values ('"+nume+"','"+data+"','"+ora+"')"); 
      out.println("<H3>REZERVARE ADAUGATA</H3>"); 
     } 
      rs.close(); 
      st.close(); 
      con.close(); 
     } 
     catch(Exception e){ 
      out.println("<H3>NU S-A REALIZAT CONEXIUNE LA BAZA DE DATE<br><br>"+ 
         e.getMessage()+"</H3>"); 

     } 
    } 
    out.println("</BODY></HTML>"); 
    out.close(); 
    } 
    public void doPost(HttpServletRequest cerere, HttpServletResponse raspuns) 
       throws ServletException, IOException{ 
     doGet(cerere,raspuns); 
    } 
} 

P.S. J'utilise serveur apache tomcat sur Windows XP

Répondre

0

la méthode getMessage() retourne ceci: "com.microsoft.jdbc.sqlserver.SQLServerDriver"

Tout d'abord, ne pas imprimer seulement message d'exception. Imprimer l'ensemble de l'exception et la trace dans les journaux du serveur. Cela donne plus d'informations précieuses.

e.printStackTrace(); 

Le message d'exception qui ne contient qu'un nom de classe qualifié complet est cependant typique pour un ClassNotFoundException. Cela signifie que le pilote JDBC n'est pas dans le classpath. Vous devez placer le (s) fichier (s) JAR dans le dossier /WEB-INF/lib de votre webapp. Ce dossier fait partie du classpath runtime de webapp.


Sans rapport avec le problème: une servlet n'est pas le bon endroit pour produire du HTML. Là, le JSP est pour. En fait, ce n'est pas le bon endroit pour écrire le code de connectivité DB directement, mais c'est une histoire entière à part :)

+0

Tout d'abord, merci beaucoup pour votre réponse. Je mets les JARs dans la lib et ça marche bien maintenant! Deuxièmement, nous venons tout juste d'apprendre les servlets au collège et c'est pourquoi je n'avais besoin que de servlets, pas de JSP. Je suis sûr qu'il y a une meilleure façon de le faire avec JSP mais c'est ce qu'on m'a assigné :) mais nous y arriverons aussi. Merci encore! Oh, pourriez-vous me dire comment sortir le e.printStackTrace()? Je sais comment le faire en java simple mais si je voulais la sortie envoyée à mon HTML? J'ai essayé mais il ne m'a pas laissé, en disant qu'une méthode retournant le vide ne peut pas être envoyée sur printWriter au html – Liviu

+0

Employez 'e.printStackTrace (out);' à la place. Ce n'est cependant pas la bonne approche. Vous devriez ** jeter ** l'exception. 'throw new ServletException (" Une exception s'est produite ", e);' Assurez-vous que vous n'avez pas déjà écrit tout ce HTML * avant * le point. Tout ce que HTML appartient à la JSP. Vous pouvez trouver la page d'information sur les balises servlets: http://stackoverflow.com/tags/servlets/info – BalusC

Questions connexes