多个复选框选项存储到数据库的单个字段中

Posted

技术标签:

【中文标题】多个复选框选项存储到数据库的单个字段中【英文标题】: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 并根据用户选择的内容得到这些结果 【参考方案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 ");
  

【讨论】:

以上是关于多个复选框选项存储到数据库的单个字段中的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 将多个复选框值和输入插入单个 sql 数据库

SumoSelect 不显示复选框或允许(多个或单个)选择

如何在 LARAVEL_7 中通过迁移发送多个复选框

Excel VBA - 将多个用户表单复选框值写入单个单元格

如何设置选择器视图以显示来自多个矩阵选项的数据?

SQL 数据库存储不同类型的值(在单个字段中或模拟为单个字段)