Servlet+JDBC实战开发书店项目讲解第8篇:商品优惠券实现

Servlet+JDBC实战开发书店项目讲解第8篇:商品优惠券实现

介绍

在本篇博客中,我们将讲解如何在Servlet+JDBC开发环境下实现商品优惠券功能。优惠券是电子商务中常见的促销手段,可以吸引用户购买商品。我们将通过一系列步骤来实现这一功能,并提供关键代码示例。

步骤一:创建数据库表

首先,我们需要在数据库中创建一个用于存储优惠券信息的表。可以使用以下SQL语句创建一个名为coupons的表:

CREATE TABLE coupons (
  id INT PRIMARY KEY AUTO_INCREMENT,
  code VARCHAR(50) NOT NULL,
  discount DECIMAL(5,2) NOT NULL,
  expiration_date DATE NOT NULL,
  is_used BOOLEAN DEFAULT FALSE
);

该表包含以下字段:

  • id:优惠券的唯一标识符,使用自增长的整数类型。
  • code:优惠券的代码,使用字符串类型。
  • discount:优惠券的折扣金额,使用小数类型。
  • expiration_date:优惠券的过期日期,使用日期类型。
  • is_used:优惠券是否已使用,使用布尔类型,默认为未使用。

步骤二:实现优惠券的添加功能

接下来,我们将实现一个Servlet来处理添加优惠券的请求。首先,我们需要创建一个名为AddCouponServlet的Java类,并继承HttpServlet类。在doPost方法中,我们可以获取前端传递的优惠券信息,并将其插入到数据库中。

以下是关键代码示例:

@WebServlet("/addon")
public class AddCouponServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取前端传递的优惠券信息
        String code = request.getParameter("code");
        double discount = Double.parseDouble(request.getParameter("discount"));
        String expirationDate = request.getParameter("expiration_date");

        // 将优惠券信息插入到数据库中
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "INSERT INTO coupons (code, discount, expiration_date) VALUES (?, ?, ?)";
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, code);
            stmt.setDouble(2, discount);
            stmt.setString(3, expirationDate);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeStatement(stmt);
            DBUtil.closeConnection(conn);
        }

        // 返回添加成功的消息给前端
        response.getWriter().write("Coupon added successfully!");
    }
}

在上述代码中,我们首先获取前端传递的优惠券信息,然后使用DBUtil类获取数据库连接,并执行插入操作。最后,我们返回添加成功的消息给前端。

步骤三:实现优惠券的查询功能

接下来,我们将实现一个Servlet来处理查询优惠券的请求。首先,我们需要创建一个名为GetCouponServlet的Java类,并继承HttpServlet类。在doGet方法中,我们可以根据优惠券代码从数据库中查询对应的优惠券信息,并将其返回给前端。

以下是关键代码示例:

@WebServlet("/get-coupon")
public class GetCouponServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取前端传递的优惠券代码
        String code = request.getParameter("code");

        // 从数据库中查询对应的优惠券信息
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "SELECT * FROM coupons WHERE code = ?";
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, code);
            rs = stmt.executeQuery();

            if (rs.next()) {
                // 将查询结果返回给前端
                String couponCode = rs.getString("code");
                double discount = rs.getDouble("discount");
                String expirationDate = rs.getString("expiration_date");
                boolean isUsed = rs.getBoolean("is_used");

                response.getWriter().write("Coupon Code: " + couponCode + "\n");
                response.getWriter().write("Discount: " + discount + "\n");
                response.getWriter().write("Expiration Date: " + expirationDate + "\n");
                response.getWriter().write("Is Used: " + isUsed + "\n");
            } else {
                response.getWriter().write("Coupon not found!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeResultSet(rs);
            DBUtil.closeStatement(stmt);
            DBUtil.closeConnection(conn);
        }
    }
}

在上述代码中,我们首先获取前端传递的优惠券代码,然后使用DBUtil类获取数据库连接,并执行查询操作。如果查询结果存在,则将优惠券信息返回给前端;否则,返回优惠券未找到的消息。

步骤四:实现优惠券的使用功能

最后,我们将实现一个Servlet来处理使用优惠券的请求。首先,我们需要创建一个名为UseCouponServlet的Java类,并继承HttpServlet类。在doPost方法中,我们可以根据优惠券代码更新数据库中对应优惠券的使用状态。

以下是关键代码示例:

@WebServlet("/use-coupon")
public class UseCouponServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取前端传递的优惠券代码
        String code = request.getParameter("code");

        // 更新数据库中对应优惠券的使用状态
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "UPDATE coupons SET is_used = TRUE WHERE code = ?";
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, code);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeStatement(stmt);
            DBUtil.closeConnection(conn);
        }

        // 返回使用成功的消息给前端
        response.getWriter().write("Coupon used successfully!");
    }
}

在上述代码中,我们首先获取前端传递的优惠券代码,然后使用DBUtil类获取数据库连接,并执行更新操作。最后,我们返回使用成功的消息给前端。

结论

通过以上步骤,我们成功实现了在Servlet+JDBC开发环境下的商品优惠券功能。通过添加、查询和使用优惠券的功能,我们可以为用户提供更好的购物体验。希望本篇博客对您有所帮助!

你可能感兴趣的:(java,servlet)