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

好的,我可以帮你回答这个问题。 首先,我们需要在Servlet连接数据库并获取数据库信息。假设我们已经创建了一个名为"shopping_cart"的数据库,里面有一个名为"products"的表,包含以下字段:id, name, price。 我们可以使用以下代码来连接数据库和获取产品信息: ```java import java.sql.*; public class ProductServlet extends HttpServlet { private String dbUrl = "jdbc:mysql://localhost:3306/shopping_cart"; private String dbUser = "root"; private String dbPassword = "password"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //连接数据库 Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword); //获取产品信息 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM products"); //输出表单 PrintWriter out = response.getWriter(); out.println("<form action='/addProduct' method='post'>"); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); double price = resultSet.getDouble("price"); //输出产品信息 out.println("<label for='product" + id + "'>" + name + " ($" + price + ")</label>"); out.println("<input type='checkbox' name='product' value='" + id + "' id='product" + id + "'><br>"); } //添加提交按钮 out.println("<input type='submit' value='Add to cart'>"); out.println("</form>"); //关闭连接 resultSet.close(); statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在以上代码,我们首先定义了连接数据库所需的URL、用户名和密码。然后,在doGet方法,我们使用JDBC API连接到数据库,并执行一个SELECT语句以获取产品信息。接着,我们使用PrintWriter输出HTML表单代码,每个产品都包含一个复选框和一个描述信息。最后,我们添加了一个提交按钮,用于将用户选择的产品添加到购物车。 当用户提交表单时,我们可以使用另一个Servlet来处理请求,并将所选产品添加到购物车。例如,我们可以编写以下代码来处理请求: ```java public class AddProductServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取选择的产品 String[] products = request.getParameterValues("product"); //将产品添加到购物车 HttpSession session = request.getSession(); List<Integer> cart = (List<Integer>) session.getAttribute("cart"); if (cart == null) { cart = new ArrayList<>(); } for (String product : products) { cart.add(Integer.parseInt(product)); } session.setAttribute("cart", cart); //重定向到购物车页面 response.sendRedirect("/cart"); } } ``` 在以上代码,我们使用HttpServletRequest的getParameterValues方法获取用户选择的产品。然后,我们将选择的产品添加到购物车,购物车使用HttpSession存储。最后,我们使用HttpServletResponse的sendRedirect方法将用户重定向到购物车页面。 希望以上代码能够帮助你实现购物车功能。如果你有任何问题,请随时问我。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值