You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
java/OrderDaoImpl.java

152 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<Order> findAll() {
//方法用于查询所有订单信息执行了一个SQL查询语句将查询结果封装为Order对象列表并返回。
String sql = "select orderid,userid,orderdate from order";
List<Order> list = new ArrayList<Order>();
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语句确保了在方法结束时数据库连接、语句对象和结果集会被正确关闭从而避免了资源泄露问题。