package flowershop.daoimpl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import flowershop.dao.OrderDao; import flowershop.model.Order; public class OrderDaoImpl implements OrderDao { @Override public List findAll() { //方法用于查询所有订单信息,执行了一个SQL查询语句,将查询结果封装为Order对象列表并返回。 String sql = "select orderid,userid,orderdate from order"; List list = new ArrayList(); try (// 2.创建数据库连接 Connection conn = Jdbc.getConnection(); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement(sql); // 4.绑定参数 // 5.执行查询 ResultSet rs = pstmt.executeQuery()) { // 6.遍历结果集 while (rs.next()) { Order order = new Order(); order.setOrderid(rs.getLong("orderid")); order.setOrderdate(rs.getDate("orderdate")); order.setUserid(rs.getString("userid")); list.add(order); } } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return list; } @Override public Order findById(String id) { //方法根据订单ID查询特定订单信息,执行了一个带参数的SQL查询语句, //将查询结果封装为Orderwjx对象并返回。在方法结束时,关闭了数据库连接。 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 2.创建数据库连接 conn = Jdbc.getConnection(); //1.加载驱动程序 String sql = "select orderid,userid,orderdate,status,amount from order where orderid = ?"; // 3.创建语句对象 pstmt = conn.prepareStatement(sql); // 4.绑定参数 pstmt.setString(1, id); // 5.执行查询 rs = pstmt.executeQuery(); // 6.遍历结果集 if (rs.next()) { Order order = new Order(); order.setOrderid(rs.getLong("orderid")); order.setUserid(rs.getString("userid")); order.setOrderdate(rs.getDate("orderdate")); return order; } } catch (SQLException e) { e.printStackTrace(); } finally { Jdbc.close(rs, pstmt, conn); } return null; } @Override public int create(Order order) { //方法用于插入新的订单信息,执行了一个带参数的SQL插入语句,并打印出成功插入的数据条数。 String sql = "insert into order(orderid,userid,orderdate,status,amount) values(?,?,?,?,?)"; try (// 2.创建数据库连接 Connection conn = Jdbc.getConnection(); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement(sql);) { // 4.绑定参数 pstmt.setLong(1, order.getOrderid()); pstmt.setString(2, order.getUserid()); // utilDate转化为sql date java.util.Date date = order.getOrderdate(); // java.sql.Date date = new java.sql.Date(now.getTime()); // Timestamp比Date更准确 pstmt.setDate(3, new java.sql.Date(date.getTime())); pstmt.setTimestamp(3, new java.sql.Timestamp(date.getTime())); pstmt.setInt(4, order.getStatus()); pstmt.setDouble(5, order.getAmount()); // 5.执行 int affectedRows = pstmt.executeUpdate(); System.out.printf("成功插入%d数据.\n", affectedRows); } catch (SQLException e) { // TODO 自动生成的 catch 块 return -1; } return 0; } @Override public int modify(Order order) { //根据订单ID更新订单金额。 String sql = "update order set amount = ? where orderid = ?"; try ( // 2.创建数据库连接 Connection conn = Jdbc.getConnection(); // 3. 创建语句对象 PreparedStatement pstmt= conn.prepareStatement(sql) ) { // 4. 绑定参数 pstmt.setDouble(1, order.getAmount()); pstmt.setLong(2, order.getOrderid()); // 5. 执行修改(C、U、D) int affectedRows = pstmt.executeUpdate(); System.out.printf("成功更新%d条数据。\n", affectedRows); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int remove(Order order) { //removewjx(Orderwjx orderwjx)方法用于删除订单信息,执行了一个带参数的SQL删除语句 //并打印出成功删除的数据条数。 String sql = "delete from order where orderid = ?"; try ( // 2.创建数据库连接 Connection conn = Jdbc.getConnection(); // 3. 创建语句对象 PreparedStatement pstmt = conn.prepareStatement(sql)) { // 4. 绑定参数 pstmt.setLong(1, order.getOrderid()); // 5. 执行修改(C、U、D) int affectedRows = pstmt.executeUpdate(); System.out.printf("成功删除%d条数据。\n", affectedRows); } catch (SQLException e) { e.printStackTrace(); } return 0; } } //try-with-resources语句,确保了在方法结束时数据库连接、语句对象和结果集会被正确关闭,从而避免了资源泄露问题。