用java和MySQL实现访客管理系统的黑名单增删改查功能,并且已经包含了异常处理的代码,并详细解释这些代码的意思
时间: 2023-06-17 19:08:49 浏览: 182
Java语言实现对MySql数据库中数据的增删改查操作的代码
好的,我来给您讲解一下。
首先,我们需要先了解一下访客管理系统的需求以及数据库表的设计,这里简单说明一下:
需求:
- 实现访客信息的增删改查功能。
- 实现黑名单的增删改查功能。
数据库表的设计:
1. visitor 表:
| 列名 | 数据类型 | 描述 |
| ---------- | ------------ | ---------------- |
| id | int | 访客id,主键 |
| name | varchar(20) | 访客姓名 |
| email | varchar(50) | 访客邮箱 |
| phone | varchar(20) | 访客电话 |
| create_time| datetime | 记录创建时间 |
| update_time| datetime | 记录更新时间 |
2. blacklist 表:
| 列名 | 数据类型 | 描述 |
| ---------- | ------------ | ---------------- |
| id | int | 黑名单id,主键 |
| visitor_id | int | 访客id,外键 |
| reason | varchar(100) | 黑名单原因 |
| create_time| datetime | 记录创建时间 |
| update_time| datetime | 记录更新时间 |
接下来是Java代码的实现:
1. 增加黑名单:
```java
public void addBlacklist(int visitorId, String reason) throws SQLException {
// 创建连接
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 开启事务
conn.setAutoCommit(false);
try {
// 查询是否已存在黑名单
String querySql = "SELECT * FROM blacklist WHERE visitor_id = ?";
PreparedStatement queryStmt = conn.prepareStatement(querySql);
queryStmt.setInt(1, visitorId);
ResultSet rs = queryStmt.executeQuery();
if (rs.next()) {
throw new SQLException("该访客已在黑名单列表中");
}
// 插入黑名单记录
String insertSql = "INSERT INTO blacklist(visitor_id, reason, create_time, update_time) VALUES (?, ?, ?, ?)";
PreparedStatement insertStmt = conn.prepareStatement(insertSql);
insertStmt.setInt(1, visitorId);
insertStmt.setString(2, reason);
insertStmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
insertStmt.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
insertStmt.executeUpdate();
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
conn.rollback();
throw e;
} finally {
// 关闭连接
conn.close();
}
}
```
上面的代码实现了向黑名单表中添加一条记录的功能,其中需要注意的是:
- 开启事务,避免出现插入黑名单记录成功而查询失败的情况。
- 查询是否已存在黑名单,避免重复添加。
- 在出现异常时,回滚事务,保证数据的一致性。
2. 删除黑名单:
```java
public void deleteBlacklist(int blacklistId) throws SQLException {
// 创建连接
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 开启事务
conn.setAutoCommit(false);
try {
// 删除黑名单记录
String deleteSql = "DELETE FROM blacklist WHERE id = ?";
PreparedStatement deleteStmt = conn.prepareStatement(deleteSql);
deleteStmt.setInt(1, blacklistId);
int affectedRows = deleteStmt.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("删除黑名单记录失败,可能是该记录不存在");
}
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
conn.rollback();
throw e;
} finally {
// 关闭连接
conn.close();
}
}
```
上面的代码实现了从黑名单表中删除一条记录的功能,其中需要注意的是:
- 开启事务,避免出现删除黑名单记录成功而更新访客表失败的情况。
- 判断是否删除成功,如果删除的记录不存在,则抛出异常。
- 在出现异常时,回滚事务,保证数据的一致性。
3. 更新黑名单:
```java
public void updateBlacklist(int blacklistId, String reason) throws SQLException {
// 创建连接
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 开启事务
conn.setAutoCommit(false);
try {
// 更新黑名单记录
String updateSql = "UPDATE blacklist SET reason = ?, update_time = ? WHERE id = ?";
PreparedStatement updateStmt = conn.prepareStatement(updateSql);
updateStmt.setString(1, reason);
updateStmt.setTimestamp(2, new Timestamp(System.currentTimeMillis()));
updateStmt.setInt(3, blacklistId);
int affectedRows = updateStmt.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("更新黑名单记录失败,可能是该记录不存在");
}
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
conn.rollback();
throw e;
} finally {
// 关闭连接
conn.close();
}
}
```
上面的代码实现了更新黑名单表中一条记录的功能,其中需要注意的是:
- 开启事务,避免出现更新黑名单记录成功而查询访客信息失败的情况。
- 判断是否更新成功,如果更新的记录不存在,则抛出异常。
- 在出现异常时,回滚事务,保证数据的一致性。
4. 查询黑名单:
```java
public List<Blacklist> queryBlacklist(int visitorId) throws SQLException {
// 创建连接
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
try {
// 查询黑名单记录
String querySql = "SELECT * FROM blacklist WHERE visitor_id = ?";
PreparedStatement queryStmt = conn.prepareStatement(querySql);
queryStmt.setInt(1, visitorId);
ResultSet rs = queryStmt.executeQuery();
List<Blacklist> list = new ArrayList<>();
while (rs.next()) {
Blacklist blacklist = new Blacklist();
blacklist.setId(rs.getInt("id"));
blacklist.setVisitorId(rs.getInt("visitor_id"));
blacklist.setReason(rs.getString("reason"));
blacklist.setCreateTime(rs.getTimestamp("create_time"));
blacklist.setUpdateTime(rs.getTimestamp("update_time"));
list.add(blacklist);
}
return list;
} finally {
// 关闭连接
conn.close();
}
}
```
上面的代码实现了查询某个访客在黑名单表中的所有记录的功能,其中需要注意的是:
- 查询结果封装到Blacklist实体类中,便于使用。
- 在查询结束后,关闭连接,释放资源。
以上就是访客管理系统的黑名单增删改查功能的Java代码实现,其中包含了异常处理的代码,保证了程序的健壮性和数据的一致性。
阅读全文