首先,我们需要创建一个商品类,包含商品的属性和对应的 getter 和 setter 方法。

public class Product {
    private int id;
    private String name;
    private double price;
    private int quantity;
    
    // constructors, getter and setter methods
}

接下来,创建一个 DAO 接口,定义对商品进行增删改查的方法。

public interface ProductDAO {
    List<Product> getAllProducts();
    Product getProductById(int id);
    List<Product> getProductsByName(String name);
    List<Product> getProductsByPriceRange(double minPrice, double maxPrice);
    void addProduct(Product product);
    void updateProduct(Product product);
    void deleteProduct(int id);
}

然后,创建一个实现了 ProductDAO 接口的类,使用 JDBC 技术完成对数据库的操作。

public class JDBCProductDAO implements ProductDAO {
    private Connection connection;
    
    public JDBCProductDAO() {
        // 初始化数据库连接
    }
    
    @Override
    public List<Product> getAllProducts() {
        List<Product> products = new ArrayList<>();
        try {
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery('SELECT * FROM products');
            while (resultSet.next()) {
                Product product = new Product();
                product.setId(resultSet.getInt('id'));
                product.setName(resultSet.getString('name'));
                product.setPrice(resultSet.getDouble('price'));
                product.setQuantity(resultSet.getInt('quantity'));
                products.add(product);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return products;
    }
    
    @Override
    public Product getProductById(int id) {
        Product product = null;
        try {
            PreparedStatement statement = connection.prepareStatement('SELECT * FROM products WHERE id = ?');
            statement.setInt(1, id);
            ResultSet resultSet = statement.executeQuery();
            if (resultSet.next()) {
                product = new Product();
                product.setId(resultSet.getInt('id'));
                product.setName(resultSet.getString('name'));
                product.setPrice(resultSet.getDouble('price'));
                product.setQuantity(resultSet.getInt('quantity'));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return product;
    }
    
    @Override
    public List<Product> getProductsByName(String name) {
        List<Product> products = new ArrayList<>();
        try {
            PreparedStatement statement = connection.prepareStatement('SELECT * FROM products WHERE name LIKE ?');
            statement.setString(1, '%' + name + '%');
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Product product = new Product();
                product.setId(resultSet.getInt('id'));
                product.setName(resultSet.getString('name'));
                product.setPrice(resultSet.getDouble('price'));
                product.setQuantity(resultSet.getInt('quantity'));
                products.add(product);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return products;
    }
    
    @Override
    public List<Product> getProductsByPriceRange(double minPrice, double maxPrice) {
        List<Product> products = new ArrayList<>();
        try {
            PreparedStatement statement = connection.prepareStatement('SELECT * FROM products WHERE price >= ? AND price <= ?');
            statement.setDouble(1, minPrice);
            statement.setDouble(2, maxPrice);
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Product product = new Product();
                product.setId(resultSet.getInt('id'));
                product.setName(resultSet.getString('name'));
                product.setPrice(resultSet.getDouble('price'));
                product.setQuantity(resultSet.getInt('quantity'));
                products.add(product);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return products;
    }
    
    @Override
    public void addProduct(Product product) {
        try {
            PreparedStatement statement = connection.prepareStatement('INSERT INTO products (name, price, quantity) VALUES (?, ?, ?)');
            statement.setString(1, product.getName());
            statement.setDouble(2, product.getPrice());
            statement.setInt(3, product.getQuantity());
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void updateProduct(Product product) {
        try {
            PreparedStatement statement = connection.prepareStatement('UPDATE products SET name = ?, price = ?, quantity = ? WHERE id = ?');
            statement.setString(1, product.getName());
            statement.setDouble(2, product.getPrice());
            statement.setInt(3, product.getQuantity());
            statement.setInt(4, product.getId());
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void deleteProduct(int id) {
        try {
            PreparedStatement statement = connection.prepareStatement('DELETE FROM products WHERE id = ?');
            statement.setInt(1, id);
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

最后,在 Servlet 中处理动态查询商品的请求,并将结果展示在网页上。

@WebServlet('/search')
public class ProductSearchServlet extends HttpServlet {
    private ProductDAO productDAO;
    
    @Override
    public void init() {
        productDAO = new JDBCProductDAO();
    }
    
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter('name');
        String minPriceStr = request.getParameter('minPrice');
        String maxPriceStr = request.getParameter('maxPrice');
        
        double minPrice = minPriceStr != null ? Double.parseDouble(minPriceStr) : 0;
        double maxPrice = maxPriceStr != null ? Double.parseDouble(maxPriceStr) : Double.MAX_VALUE;
        
        List<Product> products = productDAO.getProductsByName(name);
        request.setAttribute('products', products);
        request.getRequestDispatcher('product_list.jsp').forward(request, response);
    }
}

在网页上,可以通过表单输入商品名称、最小价格和最大价格,然后提交表单进行动态查询:

<form action='search' method='get'>
    <input type='text' name='name' placeholder='商品名称'>
    <input type='text' name='minPrice' placeholder='最小价格'>
    <input type='text' name='maxPrice' placeholder='最大价格'>
    <input type='submit' value='查询'>
</form>

在 product_list.jsp 页面中,可以根据查询结果展示商品列表。

<% List<Product> products = (List<Product>) request.getAttribute('products'); %>

<% if (products.isEmpty()) { %>
    <p>没有找到匹配的商品。</p>
<% } else { %>
    <table>
        <tr>
            <th>商品ID</th>
            <th>商品名称</th>
            <th>价格</th>
            <th>数量</th>
        </tr>
        <% for (Product product : products) { %>
            <tr>
                <td><%= product.getId() %></td>
                <td><%= product.getName() %></td>
                <td><%= product.getPrice() %></td>
                <td><%= product.getQuantity() %></td>
            </tr>
        <% } %>
    </table>
<% } %>

这样,就完成了一个使用 Java Web 的 DAO 和 JDBC 技术设计的动态查询商品的功能。


原文地址: https://www.cveoy.top/t/topic/phjP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录