【问题标题】:cannot connect servlet cu mssql database无法连接 servlet cu mssql 数据库
【发布时间】:2011-05-22 10:45:19
【问题描述】:

我正在尝试为一家餐厅创建一个在线预订应用程序。一个 html 文件调用一个 servlet。此 servlet 使用 MSSQL 数据库来跟踪预订。问题是 servlet 在尝试连接到数据库时抛出异常(getMessage() 方法返回:“com.microsoft.jdbc.sqlserver.SQLServerDriver”)。我已经为 jdbc 驱动程序包含了 msbase.jar、mssqlserver.jar 和 msutil.jar。每次我使用 MSSQL 时我都会这样做,而且它总是有效 为了让 servlet 连接到 MSSQL,我还需要做些什么吗?

这是 servlet 的代码:

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);
    }
}

附言我在 Windows Xp 上使用 apache tomcat 服务器

【问题讨论】:

    标签: java sql-server servlets jdbc


    【解决方案1】:

    getMessage() 方法返回:“com.microsoft.jdbc.sqlserver.SQLServerDriver”

    首先,不要只打印异常消息。还将整个异常和跟踪打印到服务器日志。这提供了更有价值的信息。

    e.printStackTrace();
    

    但是,仅包含完全限定类名的异常消息对于 ClassNotFoundException 来说是典型的。这又意味着 JDBC 驱动程序不在类路径中。您需要将 JAR 文件放在 webapp 的 /WEB-INF/lib 文件夹中。该文件夹是 webapp 的运行时类路径的一部分。


    与问题无关:servlet 不是输出 HTML 的正确位置。 JSP 就是为此而生的。它实际上也不是直接编写数据库连接代码的正确位置,但这是一个完整的故事:)

    【讨论】:

    • 首先非常感谢您的回复。我将 JAR 放在 lib 中,现在可以正常工作了!其次,我们刚开始在大学学习 servlet,s why I needed to do it only with servlets, not JSP. Im 肯定有s a better way to do this with JSP but this is what I was assigned to do :) but we也能做到。再次感谢!哦,你能告诉我如何输出 e.printStackTrace() 吗?我知道如何在简单的 java 中做到这一点,但如果我d want the output sent to my HTML? I tried but it didnt 让我说返回 void 的方法不能通过 printWriter 发送到 html
    • 请改用e.printStackTrace(out);。然而,这不是正确的方法。您应该抛出异常。 throw new ServletException("An exception occurred", e); 确保您还没有在之前 编写所有HTML。所有的 HTML 都属于 JSP。您可能会发现 servlets 标记信息页面很有用:stackoverflow.com/tags/servlets/info
    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2020-03-07
    • 2019-04-24
    • 2012-11-25
    • 2014-01-03
    • 2016-03-22
    • 2010-10-02
    • 2023-03-06
    相关资源
    最近更新 更多