在 Servlet 中连接数据库

http://blog.csdn.net/mzule/article/details/6193884

在 Servlet 中连接数据库应该是家常便饭的事,在 Servlet 中连接数据库也是和普通 JAVA 类 ( POJO ) 连接数据库是一样的方法,将连接数据库的代码写入 doGet() 或则 doPost() 方法中即可:

 1: import java.io.IOException;
 2: import java.io.PrintWriter;
 3: import java.sql.Connection;
 4: import java.sql.DriverManager;
 5: import java.sql.ResultSet;
 6: import java.sql.SQLException;
 7: import java.sql.Statement;
 8:  
 9: import javax.servlet.ServletException;
 10: import javax.servlet.http.HttpServlet;
 11: import javax.servlet.http.HttpServletRequest;
 12: import javax.servlet.http.HttpServletResponse;
 13:  
 14: public class LoginServlet extends HttpServlet {
 15:  
 16:     @Override
 17:     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
 18:             throws ServletException, IOException {
 19:         req.setCharacterEncoding("gb2312");
 20:         resp.setContentType("text/html;charset=gb2312");
 21:         PrintWriter out = resp.getWriter();
 22:         ResultSet rs = null;
 23:         Statement stmt = null;
 24:         Connection cnn = null;
 25:         try {
 26:             Class.forName("com.mysql.jdbc.Driver");
 27:             cnn = DriverManager
 28:                     .getConnection("jdbc:mysql://localhost:3306/menagerie?user=root&password=cannottellyou");
 29:             stmt = cnn.createStatement();
 30:             rs = stmt.executeQuery("SELECT * FROM pet");
 31:             out.println("");
 32:             while (rs.next()) {
 33:                 out.println("
");
 40:             }

");

 42:             out.close();
 43:         } catch (SQLException e) {
 44:             e.printStackTrace();
 45:         } catch (ClassNotFoundException e) {
 46:             e.printStackTrace();
 47:         } finally {
 48:             try {
 49:                 if (rs != null) {
 50:                     rs.close();
 51:                     rs = null;
 52:                 }
 53:                 if (stmt != null) {
 54:                     stmt.close();
 55:                     stmt = null;
 56:                 }
 57:                 if (cnn != null) {
 58:                     cnn.close();
 59:                     cnn = null;
 60:                 }
 61:             } catch (SQLException e) {
 62:                 e.printStackTrace();
 63:             }
 64:         }
 65:  
 66:     }
 67:  
 68:     @Override
 69:     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 70:             throws ServletException, IOException {
 71:         doPost(req, resp);
 72:     }
 73:  
 74: }

执行上面这段代码可能会出现一些问题:

1、出现 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

出现这个问题的原因很有可能是没有将 mysql 的 jar 包复制到 Tomcat 中去,我们可以考虑将 jar 包复制到 tomcat/lib 目录中去,供所有 webapps 使用,或者只将其复制到自己的 webapp 中的 lib 目录,仅供当前 webapp 使用。当我们饱含激动的再次刷新页面时,发现还是 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver ,(⊙o⊙)…,忘记说了,Tomcat 要重启才行,嘿嘿。

还有要注意的就是 jar 包不需要添加到 Eclipse 的,或许这就是大家都写 Class.forName("com.mysql.jdbc.Driver") 而不写 new Driver() 之类的原因吧。

2、本来想说一定到记得打开数据库的,不知道会抛出什么什么 refuse 异常的,全名记不住了,就关闭数据库,刷新,想看看啥异常抛出的。(⊙o⊙)…傻眼了,不开数据库也能访问,估计是自动打开的。呵呵。

额。今天卸载 Oracle 的时候发现原来 MySQL 服务时开机启动的,只要服务开了就不会出现连接数据库的异常。确定 MySQL 服务已经启动的方式是打开任务管理器--服务面板,查看 MySQL 服务是否处于运行状态。

下面我们看看停掉 MySQL 服务的之后抛出的异常:实验发现是抛出 ConnectException。

3、出现其他乱七八糟的 Exception 。(⊙o⊙)… 应该都是 SQL 语句之类的什么问题吧。

你可能感兴趣的:(在 Servlet 中连接数据库)