Java实时记录登录人数查询

1. 整体流程

首先,我们需要创建一个用于记录登录人数的数据库表,并在用户登录和退出时更新该表。然后,我们可以通过查询该表来获取实时的登录人数。

下面是整个流程的步骤:

步骤 说明
创建数据库表 创建一个用于记录登录人数的数据库表,包括id、username和login_time字段
用户登录时更新登录人数表 在用户登录时,将用户信息插入到登录人数表中,并更新登录人数
用户退出时更新登录人数表 在用户退出时,将用户信息从登录人数表中删除,并更新登录人数
查询登录人数 可以通过查询登录人数表来获取实时的登录人数

2. 代码实现

2.1 创建数据库表

首先,我们需要创建一个表来记录登录人数。可以使用以下的SQL语句来创建表:

CREATE TABLE login_count (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2.2 用户登录时更新登录人数表

在用户登录时,我们需要在登录人数表中插入一条记录,并更新登录人数。可以使用以下代码来实现:

// 获取登录用户名
String username = request.getParameter("username");

// 创建数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name", "username", "password");

// 创建插入记录的SQL语句
String insertSql = "INSERT INTO login_count (username) VALUES (?)";

// 创建更新登录人数的SQL语句
String updateSql = "UPDATE login_count SET login_count = login_count + 1";

// 创建预编译语句对象
PreparedStatement insertStatement = connection.prepareStatement(insertSql);
PreparedStatement updateStatement = connection.prepareStatement(updateSql);

// 设置参数
insertStatement.setString(1, username);

// 执行插入语句
insertStatement.executeUpdate();

// 执行更新语句
updateStatement.executeUpdate();

// 关闭连接
insertStatement.close();
updateStatement.close();
connection.close();

2.3 用户退出时更新登录人数表

在用户退出时,我们需要从登录人数表中删除该用户的记录,并更新登录人数。可以使用以下代码来实现:

// 获取退出用户名
String username = request.getParameter("username");

// 创建数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name", "username", "password");

// 创建删除记录的SQL语句
String deleteSql = "DELETE FROM login_count WHERE username = ?";

// 创建更新登录人数的SQL语句
String updateSql = "UPDATE login_count SET login_count = login_count - 1";

// 创建预编译语句对象
PreparedStatement deleteStatement = connection.prepareStatement(deleteSql);
PreparedStatement updateStatement = connection.prepareStatement(updateSql);

// 设置参数
deleteStatement.setString(1, username);

// 执行删除语句
deleteStatement.executeUpdate();

// 执行更新语句
updateStatement.executeUpdate();

// 关闭连接
deleteStatement.close();
updateStatement.close();
connection.close();

2.4 查询登录人数

我们可以通过查询登录人数表来获取实时的登录人数。可以使用以下代码来实现:

// 创建数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_name", "username", "password");

// 创建查询登录人数的SQL语句
String selectSql = "SELECT COUNT(*) AS login_count FROM login_count";

// 创建预编译语句对象
PreparedStatement selectStatement = connection.prepareStatement(selectSql);

// 执行查询语句
ResultSet resultSet = selectStatement.executeQuery();

// 获取登录人数
int loginCount = 0;
if (resultSet.next()) {
    loginCount = resultSet.getInt("login_count");
}

// 关闭连接
resultSet.close();
selectStatement.close();
connection.close();

// 输出登录人数
System.out.println("当前登录人数:" + loginCount);

3. 类图

classDiagram
    LoginCountTable "1" -- "1..*" LoginCountRecord
    class LoginCountTable {
        -id: int
        -username: String
        -loginTime: Timestamp
    }
    class LoginCountRecord {
        +getId(): int
        +getUsername(): String
        +getLoginTime(): Timestamp
    }

4. 状态图

stateDiagram
    [*] --> NotLoggedIn
    NotLoggedIn --> LoggedIn: 用户登录
    LoggedIn --> LoggedOut: 用户退出
    LoggedOut --> LoggedIn: 用户登录
    LoggedIn --> [*]: 用户注销
    Not