Java Web 动态查询商品:使用 DAO 和 JDBC 实现
为了实现动态查询商品的功能,我们需要使用 Java Web 的 DAO 和 JDBC 技术。下面是一个简单的示例,包含了所有需要的文件的全部代码和数据库。
首先,我们需要创建一个数据库表来存储商品信息。可以使用以下 SQL 语句在数据库中创建一个名为'products' 的表:
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
price DECIMAL(10, 2),
category VARCHAR(50)
);
接下来,我们创建一个 Product 类来表示商品对象,包含 id、name、price 和 category 属性,以及对应的 getter 和 setter 方法。
public class Product {
private int id;
private String name;
private double price;
private String category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
接下来,我们创建一个 ProductDAO 接口来定义商品数据访问的方法。
import java.util.List;
public interface ProductDAO {
void addProduct(Product product);
void updateProduct(Product product);
void deleteProduct(int id);
Product getProductById(int id);
List<Product> getAllProducts();
List<Product> getProductsByCategory(String category);
}
然后,我们创建一个 ProductDAOImpl 类来实现 ProductDAO 接口,使用 JDBC 技术与数据库进行交互。
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ProductDAOImpl implements ProductDAO {
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USERNAME = "root";
private static final String PASSWORD = "password";
@Override
public void addProduct(Product product) {
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement stmt = conn.prepareStatement("INSERT INTO products (name, price, category) VALUES (?, ?, ?)")) {
stmt.setString(1, product.getName());
stmt.setDouble(2, product.getPrice());
stmt.setString(3, product.getCategory());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void updateProduct(Product product) {
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement stmt = conn.prepareStatement("UPDATE products SET name = ?, price = ?, category = ? WHERE id = ?")) {
stmt.setString(1, product.getName());
stmt.setDouble(2, product.getPrice());
stmt.setString(3, product.getCategory());
stmt.setInt(4, product.getId());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void deleteProduct(int id) {
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement stmt = conn.prepareStatement("DELETE FROM products WHERE id = ?")) {
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Product getProductById(int id) {
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM products WHERE id = ?")) {
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
Product product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPrice(rs.getDouble("price"));
product.setCategory(rs.getString("category"));
return product;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Product> getAllProducts() {
List<Product> products = new ArrayList<>();
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery("SELECT * FROM products");
while (rs.next()) {
Product product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPrice(rs.getDouble("price"));
product.setCategory(rs.getString("category"));
products.add(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
@Override
public List<Product> getProductsByCategory(String category) {
List<Product> products = new ArrayList<>();
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM products WHERE category = ?")) {
stmt.setString(1, category);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Product product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPrice(rs.getDouble("price"));
product.setCategory(rs.getString("category"));
products.add(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
}
最后,我们创建一个 Servlet 来处理用户的请求,并使用 ProductDAOImpl 类来实现动态查询商品的功能。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class ProductServlet extends HttpServlet {
private ProductDAO productDAO = new ProductDAOImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String category = req.getParameter("category");
if (category != null) {
List<Product> products = productDAO.getProductsByCategory(category);
req.setAttribute("products", products);
} else {
List<Product> products = productDAO.getAllProducts();
req.setAttribute("products", products);
}
req.getRequestDispatcher("products.jsp").forward(req, resp);
}
}
在上述代码中,我们假设存在一个名为'products.jsp' 的 JSP 页面来展示查询结果。
希望这个简单的示例能帮助到你实现动态查询商品的功能。请注意,这只是一个基本的示例,你可以根据实际需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/phlC 著作权归作者所有。请勿转载和采集!