【问题标题】:Multiple checkbox options stored into a single field in a database多个复选框选项存储到数据库的单个字段中
【发布时间】:2013-02-20 10:11:24
【问题描述】:

我在 .jsp 中使用 HTML,在 servlet 中使用 Java 来处理 jsp。

我有一个技能表单,有 12 个复选框选项可供选择。 显然可以选择多个,我希望将这些然后发送到数据库。 (例如,Adam 可以拥有 Java 和 C++,而 Bob 只有 Java)。

我希望我的数据库中只有一个字段包含所有复选框的信息。目前,我将技能作为一个字符串输入," " 将它们分开,但是当我尝试检索信息时,我没有得到正确的信息。 例如,如果我使用“Java”搜索任何员工,我会返回 Bob 的详细信息,而不是 Adam 的详细信息,因为它是字符串“Java C++”的一部分,而不是单独的。

您对如何将多个复选框选项存储到数据库中的单个字段中,但可以分开以便于检索有什么建议?

【问题讨论】:

  • 你的 SQL 查询是什么样的?你用的是WHERE field = 'Java'还是WHERE field LIKE '%Java%'
  • 这是我一直用的,值“skills”代表表格中的所有技能,String Skills=""; String Skill[]=req.getParameterValues("skills"); for(int i=0;i
  • 这是获取它的 SQL PreparedStatement statement = con.prepareStatement ("select * from servlet where Skill='"+ Skills +"'AND year ='"+ Years+"'");
  • 也许我没有正确解释自己,但检索是通过表单完成的。我没有在我的 sql 中指定它,我只是调用字符串 Skills 并根据用户选择的内容得到这些结果

标签: java html mysql


【解决方案1】:

正如 Jrod 指出的那样,使用 LIKE 关键字可能会满足您的需求。

不过,从长远来看,还有其他方法可能会更好。

1-N 关系

如果您将技能放在单独的表中,则可以将它们以一对多关系连接,这意味着您可以按技能查询,然后将相关人员加入查询。这将使您能够进行更复杂的查询,例如能够搜索多个匹配技能或条件匹配技能,但不能搜索其他技能。

位标志

正如您所说,它们是复选框,我假设您的技能受到限制(受复选框数量的限制),另一种方法是使用整数和使用位标志 - 例如:

  • Java = 1
  • C++ = 2
  • Lisp` = 4
  • haskell = 8
  • Python = 16

将所有复选框的累积值相加并将其存储为整数,您可以使用bitwise AND (&) 查询数据库

【讨论】:

    【解决方案2】:

    尝试在准备好的语句中使用LIKE 运算符而不是=

    PreparedStatement statement = con.prepareStatement ("SELECT * FROM servlet WHERE skill LIKE '%" + Skills + "%'AND year ='"+ Years+"'");
    

    要根据两个技能进行选择,您可以链接类似的语句:

    PreparedStatement statement = con.prepareStatement ("SELECT * FROM servlet WHERE skill LIKE '%" + Skill1 + "%'AND skill LIKE '%" + Skill2 + "%'AND year ='"+ Years+"'");
    

    【讨论】:

      【解决方案3】:

      你可以使用

       StringBuffer sql = new StringBuffer();
      String skills[]=req.getParameterValues("skills");
      sql.append("select * from skillRelation where ");
      
      for(int i=0;i<skills.length;){
        sql.append(" skill like '%").append(skills[i]).append("%'");
        if(++i < skills.length) {
          sql.append(" and ");
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-22
        • 1970-01-01
        • 2013-04-13
        • 2019-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多