JDBC 多条件查询:根据日期、金额范围和窗口编号查询入账记录
以下是相关代码的示例:\n\n1. 实体类 Window.java:\n\npublic class Window {\n private int windowId;\n private String windowName;\n private String cateringType;\n private String managerPhoneNumber;\n \n // 省略getter和setter方法\n}\n\n2. 实体类 AccountRecord.java:\n\npublic class AccountRecord {\n private int recordId;\n private Date recordDate;\n private double amount;\n private int windowId;\n \n // 省略getter和setter方法\n}\n\n3. 数据访问对象类 WindowDao.java:\n\nimport java.sql.Connection;\nimport java.sql.PreparedStatement;\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class WindowDao {\n public List<Window> getWindowsByWindowId(int windowId) {\n List<Window> windows = new ArrayList<>();\n // 建立数据库连接\n Connection conn = DBUtil.getConnection();\n PreparedStatement pstmt = null;\n ResultSet rs = null;\n \n try {\n // 执行查询语句\n String sql = "SELECT * FROM window WHERE windowId = ?";\n pstmt = conn.prepareStatement(sql);\n pstmt.setInt(1, windowId);\n rs = pstmt.executeQuery();\n \n // 处理查询结果\n while (rs.next()) {\n Window window = new Window();\n window.setWindowId(rs.getInt("windowId"));\n window.setWindowName(rs.getString("windowName"));\n window.setCateringType(rs.getString("cateringType"));\n window.setManagerPhoneNumber(rs.getString("managerPhoneNumber"));\n windows.add(window);\n }\n } catch (SQLException e) {\n e.printStackTrace();\n } finally {\n // 关闭数据库连接\n DBUtil.closeResultSet(rs);\n DBUtil.closeStatement(pstmt);\n DBUtil.closeConnection(conn);\n }\n \n return windows;\n }\n}\n\n4. 数据访问对象类 AccountRecordDao.java:\n\nimport java.sql.Connection;\nimport java.sql.PreparedStatement;\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class AccountRecordDao {\n public List<AccountRecord> getAccountRecordsByConditions(Date date, double minAmount, double maxAmount, int windowId) {\n List<AccountRecord> records = new ArrayList<>();\n // 建立数据库连接\n Connection conn = DBUtil.getConnection();\n PreparedStatement pstmt = null;\n ResultSet rs = null;\n \n try {\n // 执行查询语句\n String sql = "SELECT ar.recordId, ar.recordDate, ar.amount, ar.windowId, w.windowName, w.cateringType " +\n "FROM accountRecord ar " +\n "JOIN window w ON ar.windowId = w.windowId " +\n "WHERE ar.recordDate = ? " +\n "AND ar.amount >= ? " +\n "AND ar.amount <= ? " +\n "AND ar.windowId = ?";\n pstmt = conn.prepareStatement(sql);\n pstmt.setDate(1, new java.sql.Date(date.getTime()));\n pstmt.setDouble(2, minAmount);\n pstmt.setDouble(3, maxAmount);\n pstmt.setInt(4, windowId);\n rs = pstmt.executeQuery();\n \n // 处理查询结果\n while (rs.next()) {\n AccountRecord record = new AccountRecord();\n record.setRecordId(rs.getInt("recordId"));\n record.setRecordDate(rs.getDate("recordDate"));\n record.setAmount(rs.getDouble("amount"));\n record.setWindowId(rs.getInt("windowId"));\n \n Window window = new Window();\n window.setWindowName(rs.getString("windowName"));\n window.setCateringType(rs.getString("cateringType"));\n record.setWindow(window);\n \n records.add(record);\n }\n } catch (SQLException e) {\n e.printStackTrace();\n } finally {\n // 关闭数据库连接\n DBUtil.closeResultSet(rs);\n DBUtil.closeStatement(pstmt);\n DBUtil.closeConnection(conn);\n }\n \n return records;\n }\n}\n\n5. 服务类 AccountRecordService.java:\n\nimport java.util.Date;\nimport java.util.List;\n\npublic class AccountRecordService {\n private AccountRecordDao accountRecordDao;\n \n public List<AccountRecord> getAccountRecordsByConditions(Date date, double minAmount, double maxAmount, int windowId) {\n return accountRecordDao.getAccountRecordsByConditions(date, minAmount, maxAmount, windowId);\n }\n \n // 省略其他服务方法\n}\n\n注意:上述代码中的DBUtil类是一个数据库工具类,用于建立数据库连接和关闭连接,可以自行实现。\n\n使用示例:\n\npublic static void main(String[] args) {\n AccountRecordService accountRecordService = new AccountRecordService();\n \n // 设置查询条件\n Date date = new Date(); // 日期为当前日期\n double minAmount = 100; // 最小金额为100\n double maxAmount = 1000; // 最大金额为1000\n int windowId = 1; // 窗口编号为1\n \n // 执行查询\n List<AccountRecord> records = accountRecordService.getAccountRecordsByConditions(date, minAmount, maxAmount, windowId);\n \n // 打印查询结果\n for (AccountRecord record : records) {\n System.out.println("记录编号:" + record.getRecordId());\n System.out.println("入账时间:" + record.getRecordDate());\n System.out.println("入账金额:" + record.getAmount());\n System.out.println("窗口编号:" + record.getWindowId());\n System.out.println("窗口名:" + record.getWindow().getWindowName());\n System.out.println("餐饮类型:" + record.getWindow().getCateringType());\n System.out.println("--------------------------");\n }\n
原文地址: https://www.cveoy.top/t/topic/p6KM 著作权归作者所有。请勿转载和采集!