在 Servlet 中连接数据库

在 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:              }
  41:              out.println("
"); ");
");
  34:                  out.println(rs.getString("name") + "
");
  35:                  out.println(rs.getString("owner") + "
");
  36:                  out.println(rs.getString("species") + "
");
  37:                  out.println(rs.getString("sex") + "
");
  38:                  out.println(rs.getDate("birth") + "
");
  39:                  out.println(rs.getString("death") + "
"
);
  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 语句之类的什么问题吧。

你可能感兴趣的:(数据库,mysql,servlet,null,import,webapp)