マルチ条件ファジイクエリ
4086 ワード
以下は、jspから送信されたクエリーする文字列のデータベースへの対応するレコードの検索を実現する簡単な多条件曖昧クエリーの例であり、この文字列は、データベースフィールドの連続するサブ文字列であってもよいし、いくつかの不連続なサブ文字列の組合せであってもよい.例えば、データベースのフィールドのデータ:党委員会事務室の電話;jspページには「党委員会弁公室」、「事務室」などを入力することができる.「党弁公室」、「公話」などの入力も実現でき、党委員会事務室の対応記録を見つけることができる.
jspのコード:
jspのコード:
<s:form action="findPhoneNumByKeyWords" target="viewPhoneNum">
:<input name="keywords" type="text">
<input type="submit" value=" ">
</s:form>
Actionクラスのコード:public String findPhoneNumByKeyWords() throws UnsupportedEncodingException {
HttpServletRequest request = ServletActionContext.getRequest();
String strKeywords = request.getParameter("keywords");
char[] keywords = strKeywords.toCharArray();
setPhoneNum(phoneNum);
System.out.println(keywords.length);
if (keywords.length != 0) {
phoneNumList = phoneBiz.findPhoneNumByKeyWords(keywords);
}
System.out.println(phoneNumList);
if (phoneNumList != null) {
return "findPhoneNumByKeyWords";
}
return "fail";
}
daoレイヤのコード:public List<PhoneNum> findPhoneNumByKeyWords(char[] keywords) {
session = sessionFactory.getCurrentSession();
String sqlStr = null;
//
Query query1 = null;
//
StringBuffer strb1 = new StringBuffer("from PhoneNum as pn where");
// ,
for (int i = 0; i < keywords.length; i++) {
//
if (i != keywords.length - 1) {
strb1.append(" pn.academyName like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb1.append(" pn.academyName like '%").append(keywords[i])
.append("%'");
}
}
//
sqlStr = strb1.toString();
// SQL
query1 = session.createQuery(sqlStr);
// ,
if (query1.list() != null) {
phoneNums = query1.list();
}
//
Query query2 = null;
StringBuffer strb2 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
//
if (i != keywords.length - 1) {
strb2.append(" pn.department like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb2.append(" pn.department like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb2.toString();
query2 = session.createQuery(sqlStr);
// , phoneNums addAll
if (query2.list() != null && phoneNums != null) {
phoneNums.addAll(query2.list());
}
//
Query query3 = null;
StringBuffer strb3 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
//
if (i != keywords.length - 1) {
strb3.append(" pn.teacherName like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb3.append(" pn.teacherName like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb3.toString();
query3 = session.createQuery(sqlStr);
if (query3.list() != null && phoneNums != null) {
phoneNums.addAll(query3.list());
}
//
Query query4 = null;
StringBuffer strb4 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
//
if (i != keywords.length - 1) {
strb4.append(" pn.phoneNum like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb4.append(" pn.phoneNum like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb4.toString();
query4 = session.createQuery(sqlStr);
//
if (query4.list() != null && phoneNums != null) {
phoneNums.addAll(query4.list());
}
if (phoneNums.size() != 0) {
return phoneNums;
}
return null;
}
以上のコードは少し粗末ですが、あなたに役に立つなら勉強しましょう.