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