假设已经有了一个数据库连接对象 conn,以下是一种可能的实现方式:

  1. 首先查询当前房间的水表和电表 ID,可以用以下 SQL 语句:

    SELECT water_meter_id, electric_meter_id FROM room WHERE room_id = ?
    

    这里的 ? 是占位符,需要用 PreparedStatement 来设置具体的房间 ID。

  2. 判断新的水表 ID 和电表 ID 是否和查询结果相同,如果相同则不需要修改,直接返回。

  3. 否则,先删除当前房间的水表和电表数据,可以用以下 SQL 语句:

    DELETE FROM water_meter WHERE water_meter_id = ?
    DELETE FROM electric_meter WHERE electric_meter_id = ?
    

    这里的 ? 也是占位符,需要用 PreparedStatement 来设置具体的水表 ID 和电表 ID。

  4. 然后新增新的水表和电表数据,可以用以下 SQL 语句:

    INSERT INTO water_meter (water_meter_id) VALUES (?) 
    INSERT INTO electric_meter (electric_meter_id) VALUES (?) 
    

    这里的 ? 还是占位符,需要用 PreparedStatement 来设置具体的水表 ID 和电表 ID。

  5. 最后更新房间表中的水表和电表 ID,可以用以下 SQL 语句:

    UPDATE room SET water_meter_id = ?, electric_meter_id = ? WHERE room_id = ?
    

    这里同样需要用 PreparedStatement 来设置具体的水表 ID、电表 ID 和房间 ID。

完整的 Java 代码如下:

public void updateRoomMeter(int roomId, int newWaterMeterId, int newElectricMeterId) throws SQLException {
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
        conn = getConnection(); // 假设已经获得了数据库连接
        stmt = conn.prepareStatement("SELECT water_meter_id, electric_meter_id FROM room WHERE room_id = ?");
        stmt.setInt(1, roomId);
        rs = stmt.executeQuery();
        if (rs.next()) {
            int oldWaterMeterId = rs.getInt("water_meter_id");
            int oldElectricMeterId = rs.getInt("electric_meter_id");
            if (oldWaterMeterId == newWaterMeterId && oldElectricMeterId == newElectricMeterId) {
                return; // 新的水表和电表 ID 和当前的相同,不需要修改
            }
            stmt = conn.prepareStatement("DELETE FROM water_meter WHERE water_meter_id = ?");
            stmt.setInt(1, oldWaterMeterId);
            stmt.executeUpdate();
            stmt = conn.prepareStatement("DELETE FROM electric_meter WHERE electric_meter_id = ?");
            stmt.setInt(1, oldElectricMeterId);
            stmt.executeUpdate();
            stmt = conn.prepareStatement("INSERT INTO water_meter (water_meter_id) VALUES (?) ");
            stmt.setInt(1, newWaterMeterId);
            stmt.executeUpdate();
            stmt = conn.prepareStatement("INSERT INTO electric_meter (electric_meter_id) VALUES (?) ");
            stmt.setInt(1, newElectricMeterId);
            stmt.executeUpdate();
            stmt = conn.prepareStatement("UPDATE room SET water_meter_id = ?, electric_meter_id = ? WHERE room_id = ?");
            stmt.setInt(1, newWaterMeterId);
            stmt.setInt(2, newElectricMeterId);
            stmt.setInt(3, roomId);
            stmt.executeUpdate();
        }
    } finally {
        close(rs);
        close(stmt);
        close(conn);
    }
}

原文地址: https://www.cveoy.top/t/topic/n8th 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录