在 Servlet 中连接数据库

    技术2026-05-10  4

    在 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: } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

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

    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 语句之类的什么问题吧。

    最新回复(0)