复制
收藏
提问
简洁
package com.example.dao; import com.example.entity.Product; import com.example.utils.JdbcUtil; import java.sql.Connection; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; /** * 商品与数据库交互类 */ public class ProductDao { /** * 根据id查询商品信息 * @param id * @return */ public List<Product> selectProduct(String id) { Connection connection = null; ResultSet resultSet = null; try { connection = JdbcUtil.getConnection(); // 查询商品 String sql = ""; if(id == null || id.trim().equals("")) { sql = "select * from product"; resultSet = JdbcUtil.executeQuery(connection, sql); } else { sql = "select * from product where id = ?"; resultSet = JdbcUtil.executeQuery(connection, sql, id); } List<Product> productList = new ArrayList<>(); while (resultSet.next()) { // 查询结果不为空就返回商品信息 int proId = resultSet.getInt("id"); String name = resultSet.getString("name"); int num = resultSet.getInt("num"); String style = resultSet.getString("style"); String provider = resultSet.getString("provider"); Product product = new Product(proId, name, num, style, provider); productList.add(product); } return productList; }catch (Exception e){ e.printStackTrace(); return new ArrayList<>(); }finally { try { JdbcUtil.close(resultSet, connection); }catch (Exception e){ e.printStackTrace(); } } } /** * 添加商品信息 * @param product * @return */ public int insertProduct(Product product) throws Exception { Connection connection = null; int result = 0; try { connection = JdbcUtil.getConnection(); // 新增商品信息 String sql = "insert into product(name, num, style, provider) values(?, ?, ?, ?)"; result = JdbcUtil.update(connection, sql, product.getName(), product.getNum(), product.getStyle(), product.getProvider()); return result; }catch (Exception e){ e.printStackTrace(); throw new Exception("添加失败!"); }finally { try { JdbcUtil.close(null, connection); }catch (Exception e){ e.printStackTrace(); } } } /** * 删除商品信息 * @param id * @return */ public int deleteProduct(String id) throws Exception { Connection connection = null; int result = 0; try { connection = JdbcUtil.getConnection(); // 删除商品信息 String sql = "delete from product where id = ?"; result = JdbcUtil.update(connection, sql, id); return result; }catch (Exception e){ e.printStackTrace(); throw new Exception("删除失败!"); }finally { try { JdbcUtil.close(null, connection); }catch (Exception e){ e.printStackTrace(); } } } /** * 修改商品信息 * @param product * @return */ public int updateProduct(Product product) throws Exception { Connection connection = null; int result = 0; try { connection = JdbcUtil.getConnection(); // 修改商品信息 String sql = "update product set name = ?, num = ?, style = ?, provider = ? where id = ?"; result = JdbcUtil.update(connection, sql, product.getName(), product.getNum(), product.getStyle(), product.getProvider(), product.getId()); return result; }catch (Exception e){ e.printStackTrace(); throw new Exception("修改失败!"); }finally { try { JdbcUtil.close(null, connection); }catch (Exception e){ e.printStackTrace(); } } } }这一段代码的功能与意义分析
2个月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
这段Java代码是一个简单的数据访问对象(DAO)实现,用于与数据库中的商品表进行交互。DAO模式是一种设计模式,用于将数据访问逻辑与业务逻辑分离,使得代码更加模块化和易于维护。下面是对这段代码的功能和意义的分析:
-
包结构:
com.example.dao
:定义了DAO层的包路径,表明这个类是数据访问层的一部分。
-
导入的类:
com.example.entity.Product
:商品实体类,用于存储商品的属性。com.example.utils.JdbcUtil
:一个工具类,用于数据库连接和执行SQL语句。
-
类定义:
ProductDao
:商品数据访问对象类,封装了对商品表的所有数据库操作。
-
方法定义:
selectProduct(String id)
:根据商品ID查询商品信息。如果没有提供ID,则查询所有商品。- 使用了
JdbcUtil
来获取数据库连接和执行查询。 - 结果集通过遍历,创建
Product
对象并添加到列表中返回。
- 使用了
insertProduct(Product product)
:添加新的商品信息到数据库。- 使用了
JdbcUtil
来执行插入操作。 - 返回插入操作影响的行数。
- 使用了
deleteProduct(String id)
:根据商品ID删除商品信息。- 使用了
JdbcUtil
来执行删除操作。 - 返回删除操作影响的行数。
- 使用了
updateProduct(Product product)
:更新商品信息。- 使用了
JdbcUtil
来执行更新操作。 - 返回更新操作影响的行数。
- 使用了
-
异常处理:
- 每个方法都可能抛出异常,这表明在执行数据库操作时可能会遇到错误,如连接问题或SQL执行错误。
-
资源管理:
- 使用
finally
块确保数据库连接和结果集在操作完成后被正确关闭,以避免资源泄露。
- 使用
-
代码的健壮性:
- 在
selectProduct
方法中,如果查询没有结果,返回一个空的列表,而不是null
,这可以避免调用者处理null
值的额外复杂性。
- 在
-
代码的可维护性:
- 通过将数据库操作封装在DAO类中,业务逻辑层可以独立于数据访问逻辑,使得代码更容易维护和扩展。
-
潜在的改进:
- 代码中存在硬编码的SQL语句,这可能会导致SQL注入风险。使用预编译的
PreparedStatement
可以提高安全性。 - 异常处理可以更加细化,根据不同的异常类型提供更具体的错误信息。
- 代码中存在硬编码的SQL语句,这可能会导致SQL注入风险。使用预编译的
这段代码的意义在于提供了一个基本的框架,用于在Java应用程序中管理和操作数据库中的商品数据。通过遵循DAO模式,它有助于保持代码的清晰和可维护性。
你觉得结果怎么样?