【问题标题】:Limiting the number of data user can insert in database using java [closed]限制用户可以使用java插入数据库的数据数量[关闭]
【发布时间】:2021-02-06 18:31:18
【问题描述】:

所以我正在使用 java 制作课程管理系统,我完成了所有工作,但无法弄清楚如何限制某些数据的数据数量。 所以在我的数据库中,我有两列:课程和模块:

所以在数据库中,一门课程可以有多个模块,所以我想要的是一个学期的课程只能有四个模块,如果模块是针对每学期六级学生的,用户可以提供两个必修模块和两个选修课(可选)模块,每个级别由两个学期组成,因此如果用户尝试输入错误消息,则会弹出。即使是一个简单的建议也会很棒,我只需要了解如何做到这一点。任何帮助表示赞赏。

编辑:

【问题讨论】:

  • 从描述中我理解的是:课程 1 -> 模块 1、模块 2、模块 3、模块 4 如果(模块 1、2、3、4 中的任何一个 == 6 级学生),那么每个学期 2必修科目,2 可选,直到这里还好,但倒数第二行不是很清楚每个级别由 2 个学期组成,是否意味着 6 级应该被视为 11 || 12个学期
  • @Koushlendra 所以每个模块有 3 个级别(4,5 和 6),每个级别有两个学期 1 和 2。我在上面的问题中添加了。
  • 几个问题:一个模块附加到一个特定的级别、学期、模块类型和课程,这意味着模块 M1 可以只有单级、单学期、单类型和单学期。我对吗?
  • @Koushlendra 是的

标签: java mysql swing


【解决方案1】:

听起来您有一个业务规则,其中一个表上的父记录应该在另一个表中有一定数量的相关子记录。例如,您可能有一条规则,其中 invoice 行必须有一个或多个相关的 line_item 行,而不是零。

您至少可以通过以下两种方式执行该规则:

  • 您的应用会在 (a) 数据输入和 (b) 数据检索期间对此进行检查。
  • 您建立一个database trigger,当从这些特定表中插入、更新或删除行时,该database trigger 会自动在服务器中运行。如果违反规则,触发器可能会引发错误。该错误会导致交易被拒绝。

最安全的方法是两者都做。在涉及数据库之前,在应用程序内进行检查通常更方便。但是,如果您的应用在该检查代码中存在任何错误,或者管理员可能正在更改您应用之外的数据,则触发器是您的后备以确保遵守业务规则。

【讨论】:

  • 有人告诉我,我可以通过首先将数据放入数组列表并检查数据来做到这一点,但是在数据库级别有没有更简单的方法?
  • @NutanPanta 理想情况下,两者都做:签入您的应用程序,然后编写触发器。我更新了答案来说明这一点。
  • 谢谢,我会尝试,即使一个工作而另一个不工作也没关系,因为它是针对学校项目的,不必如此详细。
  • @NutanPenta 学习如何执行触发器可能会涉及更多内容,包括学习数据库使用的编程语言,通常是 SQL 的超集。与你的老师核实。我想如果你在编程课上,你应该在你的应用程序中进行检查。但是如果你在一个数据库类中,你应该做一个触发器。
【解决方案2】:

@BasilBourque

所以我想到了一种方法,通过在数据库中使用 count 来实现。我想我不能在评分之前分享我的代码,但我会尽可能多地分享。

所以首先我使用结果集通过此查询SELECT COUNT(moduleName) AS total FROM modules WHERE courseName = ? AND level = ? AND semester = ? AND moduleType = ?; 获取计数。 因此,在我验证我的数据的地方,我从用户在我的 GUI 中选择的数据中获取课程名称、lvl 和学期,我从中将计数放入一个整数中,如下所示:

ResultSet resultSet = moduleTable.getModuleCount(cname,lvl,sem,moduleType);
int count = 0;
while (resultSet.next()){
   count = resultSet.getInt("total");
}

然后我这样验证它:

if (lvl.equals("6")){
    if (moduleType.equals("Compulsory")  && count < 2){
        moduleTable.insert(mName, cname, lvl, moduleType, sem);
        count++;
    } else if (moduleType.equals("Elective")  && count < 4){
        moduleTable.insert(mName, cname, lvl, moduleType, sem);
        count++;
    } else {
       JOptionPane.showMessageDialog(this, "Compulsory subject for level 6 for each sem cannot be more than 2 and not more than 4 for elective Modules.");
    }
} else {
    if (count < 4){
        moduleTable.insert(mName,cname, lvl, moduleType, sem);
        count++;
    } else {
        JOptionPane.showMessageDialog(this,"Each Semester cannot have more than 4 modules");
    }
}

我试过了,它似乎有效,但您能否就此发表您的意见,或者我是否必须更正或添加一些内容,如果此答案似乎正确,请告诉我,我会将其标记为该问题的正确答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2021-04-29
    • 2020-08-28
    相关资源
    最近更新 更多