2

.jsp で HTML を使用し、サーブレットで Java を使用して jsp を処理しています。

スキル用のフォームがあり、12 のチェックボックス オプションから選択できます。明らかに複数を選択できます。これらをデータベースに送信したいと思います。(例として、Adam は Java と C++ を持つことができ、Bob は Java だけを持つことができます)。

データベース内の 1 つのフィールドだけに、すべてのチェックボックスの情報を含めたいと思っています。現時点では、スキルを" "分離して 1 つの文字列として入力しているのですが、情報を取得しようとすると、正しい情報が返されません。たとえば、「Java」を含む従業員を検索すると、Bob の詳細は返されますが、Adam の詳細は返されません。これは、別の文字列ではなく、文字列「Java C++」の一部であるためです。

複数のチェックボックス オプションをデータベースの 1 つのフィールドに格納し、簡単に取得できるように分割する方法について何か提案はありますか?

4

3 に答える 3

2

Jrod が指摘したように、LIKEキーワードを使用すると、ニーズが満たされる可能性があります。

ただし、余談ですが、長期的にはより良い方法が他にもあります。

1対Nの関係

別のテーブルにスキルがある場合は、それらを 1 対多の関係で関連付けることができます。つまり、スキル別にクエリを実行し、関連する人々をクエリに参加させることができます。これにより、複数の一致するスキルまたは条件付き一致するスキルを検索できるが別のスキルを検索できないなど、より複雑なクエリを使用できるようになります。

ビットフラグ

あなたがチェックボックスだと言っているように、あなたのスキルは(チェックボックスの数によって)制限されていると思います。別のアプローチは、整数を使用してビットフラグを使用することです-例:

  • ジャワ=1
  • C++ = 2
  • Lisp` = 4
  • ハスケル = 8
  • パイソン = 16

すべてのチェックボックスの累積値を合計し、これを整数として保存すると、ビットごとのAND (&)を使用してデータベースにクエリを実行できます。

于 2013-03-05T21:12:34.867 に答える
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 に答える