Java 如何根据1 Select语句的结果有条件地执行Mysql insert语句

Java 如何根据1 Select语句的结果有条件地执行Mysql insert语句,java,mysql,triggers,Java,Mysql,Triggers,考虑我的Ajax调用在我解释问题的代码下面的样子: $.ajax({ type : "GET", url : "servlet", data: {course_name_param:selectedOption}, dataType:"json", success : function(data) {

考虑我的Ajax调用在我解释问题的代码下面的样子:

 $.ajax({
                type : "GET",
                url : "servlet",
                data: {course_name_param:selectedOption},
                dataType:"json",
                success : function(data) {
                    $('#startDate').empty();
              $('#startDate').append('<option value="">Select Start Date</option>');
     $.each(data, function(index, jsonData) {

  /*Here below is where I check availability*/
 if(jsonData.students_registered < jsonData.max_size){

      /*Display available courses*/
  }
}
我有一个MySQL表,其中保存了有关教育课程的信息。其中1个字段在最大容量时可用

注册是一个insert语句。我需要通过检查插入时实际可用的插槽来控制这一点

目前,我使用对该表的Ajax调用执行检查。当多个用户在不到一分钟的时间内将页面加载到相对较近的位置时,检查是无用的

问题:

我如何在远离前端的情况下实现这一点

这是不是应该包含在包含我的逻辑的类中 插入语句

我不认为在这么多问题中会考虑这种情况,只是在避免重复条目的情况下,这不是我的情况

如有任何建议,将不胜感激


您可以简单地以这样一种方式构造您的查询,即您只回拉具有开放槽的课程。类似这样的事情可能会给你一个想法:

SELECT   courses.title
FROM     courses 
WHERE    students_registered < max_size
如果要确保对数据库进行验证,可以使用条件插入:

INSERT INTO enrollments(course_id, student_id)  
SELECT <your course id>, <your student id> FROM dual
WHERE EXISTS (
  SELECT * FROM courses
  WHERE  id = <your course id>
  AND    students_registered < max_size
)

用户插入的表上的插入前触发器。我采用了这种方法。然后在应用程序中处理SQLException:

    CREATE DEFINER=`root`@`localhost` TRIGGER before_insert_registration
BEFORE INSERT ON registration 
FOR EACH ROW
BEGIN

DECLARE num_rows INTEGER;

Declare x INTEGER;
SET x = NEW.course_id;

SELECT 
    COUNT(*)
INTO num_rows FROM  courses
WHERE
    course_id = NEW.course_id
        AND maxsize > students_registered;

    IF num_rows < 1 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Testing Custom Fail-Over';
    END IF;
END

你在循环什么?@DrazenBjelovuk循环通过ajax调用返回的课程信息行。我认为你可以简单地在SQL查询中实现该条件,尽管我需要了解你的数据库模式以提供进一步的帮助。在用户尝试插入时可以进行此检查吗?当然,这就简单多了。我已经更新了答案。当我有机会测试这个问题时,我会更新你,现在我们处于活动状态,因此我没有更改的窗口。Drazen,选择返回20多行。请参阅我正在使用的选择:从dual WHERE EXISTS中选择2从course_id=2和students_registered