多个复选框选项存储到数据库的单个字段中
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正如 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 ");
【讨论】:
以上是关于多个复选框选项存储到数据库的单个字段中的主要内容,如果未能解决你的问题,请参考以下文章