2010-12-08 83 views
0

我嘗試爲餐館創建一個在線預訂應用程序。一個html文件調用一個servlet。這個servlet使用MSSQL數據庫來跟蹤預訂。問題是servlet在嘗試連接數據庫時拋出一個異常(getMessage()方法返回:「com.microsoft.jdbc.sqlserver.SQLServerDriver」)。我爲jdbc驅動包含了msbase.jar,mssqlserver.jar和msutil.jar。我每次使用MSSQL都是這樣做的,它始終工作 有什麼我需要做的,以獲得一個servlet連接到MSSQL?無法連接servlet cu mssql數據庫

這裏是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.我使用Windows XP上的Apache Tomcat服務器

回答

0

的getMessage()方法返回的: 「com.microsoft.jdbc.sqlserver.SQLServerDriver」

首先,不僅打印異常消息。將整個異常和跟蹤打印到服務器日誌中。這提供了更有價值的信息。

e.printStackTrace(); 

僅包含一個全限定類名的異常消息然而對於一個典型ClassNotFoundException。這又意味着JDBC驅動程序不在類路徑中。您需要將JAR文件放入您的Web應用程序的/WEB-INF/lib文件夾中。該文件夾是webapp運行時類路徑的一部分。


與問題無關:一個servlet不是輸出HTML的正確位置。這是JSP的用途。它實際上並不是直接編寫數據庫連接代碼的正確位置,但這是一個完整的故事:)

+0

首先,非常感謝您的回覆。我把JAR放在lib中,現在工作正常!其次,我們剛開始在大學裏學習servlets,這就是爲什麼我只需要使用servlet而不是JSP來完成它。我確定有一個更好的方法可以用JSP來做到這一點,但這是我被分配去做的事情:)但我們也會做到這一點。再次感謝!哦,你能告訴我如何輸出e.printStackTrace()?我知道如何在簡單的Java中做到這一點,但如果我想要輸出發送到我的HTML?我試過了,但它沒有讓我說,返回void的方法不能通過printWriter發送到html – Liviu 2010-12-09 13:01:24