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

Java 多个复选框选项存储在数据库中的单个字段中,java,html,mysql,Java,Html,Mysql,我在.jsp中使用HTML,在servlet中使用Java来处理jsp 我有一个技能表格,有12个复选框选项可供选择。 很明显,可以选择多个,我希望这些数据被发送到数据库。(例如,亚当可以有java和C++,鲍伯只需要java)。 我只希望数据库中的一个字段包含所有复选框的信息。目前,我的技能就像一个字符串,用“将它们分开,但是当我试图检索信息时,我没有得到正确的信息。 例如,如果我搜索任何带有“Java”的员工,我会得到Bob的详细信息,但不会得到Adam的,因为它是字符串“Java C++”

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

我有一个技能表格,有12个复选框选项可供选择。 很明显,可以选择多个,我希望这些数据被发送到数据库。(例如,亚当可以有java和C++,鲍伯只需要java)。 我只希望数据库中的一个字段包含所有复选框的信息。目前,我的技能就像一个字符串,用
将它们分开,但是当我试图检索信息时,我没有得到正确的信息。 例如,如果我搜索任何带有“Java”的员工,我会得到Bob的详细信息,但不会得到Adam的,因为它是字符串“Java C++”的一部分,而不是单独的


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

尝试使用
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+"'");

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

然而,从另一方面来说,从长远来看,还有其他更好的方法

1-N关系

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

位标志

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

  • Java=1
  • C++=2
  • Lisp`=4
  • 哈斯克尔=8
  • Python=16
将所有复选框中的累积值相加并将其存储为整数将允许您使用和(&)查询数据库

 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 ");
  }
}
stringbuffersql=newstringbuffer();
字符串技能[]=req.getParameterValues(“技能”);
append(“select*fromskillrelationwhere”);

对于(int i=0;i您的SQL查询看起来像什么?您是使用
WHERE field='Java'
还是
WHERE field='Java%'
这是我一直在使用的,值“skills”表示表单中的所有技能,String skills=“”;String Skill[]=req.getParameterValues(“skills”);for(int i=0;这是用于将其取回PreparedStatement=con.prepareStatement(“从servlet中选择*,其中skill='“+Skills+'”和year='“+Years+'”)的SQL);可能我没有正确解释自己,但检索是通过表单完成的。我没有在sql中指定它,我只是调用字符串技能,根据用户选择的内容,它会得到这些结果