Java Web 动态商品查询功能实现:DAO、JDBC 及 Servlet 应用
首先,我们需要创建一个商品类,包含商品的属性和对应的 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 著作权归作者所有。请勿转载和采集!