2

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

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

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

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

4

3 回答 3

2

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

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

1-N 关系

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

位标志

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

  • 爪哇 = 1
  • C++ = 2
  • Lisp` = 4
  • 哈斯克尔 = 8
  • 蟒蛇 = 16

将所有复选框的累积值相加并将其存储为整数将允许您使用按位与 (&)查询数据库

于 2013-03-05T21:12:34.867 回答
1

尝试在准备好的语句中 使用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+"'");
于 2013-03-05T20:55:24.553 回答
0

你可以使用

 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 ");
  }
}
于 2013-03-05T22:24:25.703 回答