Java 代码实现房间水电表数据维护:删除和新增重复 ID
假设已经有了一个数据库连接对象 conn,以下是一种可能的实现方式:
-
首先查询当前房间的水表和电表 ID,可以用以下 SQL 语句:
SELECT water_meter_id, electric_meter_id FROM room WHERE room_id = ?这里的
?是占位符,需要用PreparedStatement来设置具体的房间 ID。 -
判断新的水表 ID 和电表 ID 是否和查询结果相同,如果相同则不需要修改,直接返回。
-
否则,先删除当前房间的水表和电表数据,可以用以下 SQL 语句:
DELETE FROM water_meter WHERE water_meter_id = ? DELETE FROM electric_meter WHERE electric_meter_id = ?这里的
?也是占位符,需要用PreparedStatement来设置具体的水表 ID 和电表 ID。 -
然后新增新的水表和电表数据,可以用以下 SQL 语句:
INSERT INTO water_meter (water_meter_id) VALUES (?) INSERT INTO electric_meter (electric_meter_id) VALUES (?)这里的
?还是占位符,需要用PreparedStatement来设置具体的水表 ID 和电表 ID。 -
最后更新房间表中的水表和电表 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 著作权归作者所有。请勿转载和采集!