要实现用户只能有一个未完成就诊的挂号帖的业务逻辑,可以在插入挂号帖的代码之前先查询用户是否已经有未完成的挂号帖。如果查询结果存在未完成的挂号帖,则不执行插入操作,直接返回false。

在代码中添加以下逻辑:

// 查询用户是否有未完成的挂号帖
sql = "select count(*) from registration where user_id=? and status=0;";
statement = connection.prepareStatement(sql);
// 占位符
statement.setInt(1, registration.getUser_id());
// 执行查询
ResultSet rs = statement.executeQuery();
if (rs.next()) {
    int count = rs.getInt(1);
    if (count > 0) {
        // 用户已经有未完成的挂号帖,回滚数据
        connection.rollback();
        return false;
    }
}

// 执行添加路径的sql
// ...

完整代码如下:

Connection connection = null;
try {
    //获取数据库连接
    connection = DbUtil.getConnection();
    //开启事务管理--关闭自动提交
    connection.setAutoCommit(false);
    
    // 查询用户是否有未完成的挂号帖
    String sql = "select count(*) from registration where user_id=? and status=0;";
    PreparedStatement statement = connection.prepareStatement(sql);
    // 占位符
    statement.setInt(1, registration.getUser_id());
    // 执行查询
    ResultSet rs = statement.executeQuery();
    if (rs.next()) {
        int count = rs.getInt(1);
        if (count > 0) {
            // 用户已经有未完成的挂号帖,回滚数据
            connection.rollback();
            return false;
        }
    }

    // 执行添加路径的sql
    sql = "insert into registration(disease_type,describetion,describe_img,registration_time,doctor_id,user_id,status,book_time) value (?,?,?,?,?,?,?,?);";
    statement = connection.prepareStatement(sql);
    //占位符
    statement.setString(1, registration.getDisease_type());
    statement.setString(2, registration.getDescribetion());
    statement.setString(3, registration.getDescribe_img());
    statement.setString(4, registration.getRegistration_time());
    statement.setInt(5, registration.getDoctor_id());
    statement.setInt(6, registration.getUser_id());
    statement.setInt(7, registration.getStatus());
    statement.setString(8, registration.getBook_time());
    //更新语句
    int iresult = statement.executeUpdate();
    if(iresult<=0){
        //修改不成功,回滚
        connection.rollback();
        return false;
    }else {
        //成功提交
        connection.commit();
    }
    
    //执行修改医生就诊人数的sql
    sql = "update doctor set wait_nums = wait_nums + 1 where id=?;";
    statement = connection.prepareStatement(sql);
    //重新赋值
    statement.setInt(1,registration.getDoctor_id());
    //执行
    iresult = statement.executeUpdate();
    return iresult > 0;
}catch (Exception e) {
    try {
        //出现异常,回滚数据
        connection.rollback();
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }
    System.err.println("出现异常"+ e.getMessage());
    return false;
} finally {
    try {
        //恢复自动提交
        connection.setAutoCommit(true);
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }
    //关闭链接
    DbUtil.close(connection);
}
``
怎么在下面的代码的基础上实现一个用户只能有一个未完成就诊的挂号帖的业务操逻辑Connection connection = null; try 获取数据库连接 connection = DbUtilgetConnection; 开启事务管理--关闭自动提交 connectionsetAutoCo

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

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