本文介紹的查詢方式有:l 根據某個特定的欄位查詢;l 在多個欄位中查詢;l 根據任意欄位查詢;l 任意欄位組合查詢;l 多值查詢。
根據某個特定的欄位進行查詢使用者在輸入介面中輸入要查詢的欄位的值,然後系統根據這個值進行尋找。下面的執行個體是根據使用者名稱查詢使用者的詳細資料,簡單的如下:關鍵代碼如下:<p>請輸入要查詢的姓名:</p><form action="select.jsp" method="POST"> <p><input type="text" name="username" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重寫" name="B2"></p></form>處理檔案的代碼如下:<%@ page contentType="text/html;charset=gb2312"%><% StringBuffer sql=new StringBuffer(); //查詢字串 String username = request.getParameter("username"); //查詢的條件 if(username==null||username.length()==0) { out.println("請輸入查詢條件!"); } else { sql.append("select * from user where username like '"); sql.append(username); sql.append("'"); } //接下來根據上面產生的sql進行查詢即可%>這裡主要關心SQL語句即可,查詢過程和顯示過程參考其它主題。上面進行的是精確的查詢,可以進行模糊查詢,例如可以查詢使用者名稱包含某個字的使用者的資訊。只需要修改代碼中的查詢語句部分,修改後的代碼如下: sql.append("select * from user where username like '%"); sql.append(username); sql.append("%'");僅僅增加了模糊查詢的萬用字元“%”,如果要查詢以什麼開頭,去掉前面的萬用字元即可,如果查詢以什麼結束,去掉後面的同配符即可。
在多個欄位中查詢假設有一個關於Java技術的BBS,每個記錄都有標題、摘要、內容等欄位,這裡我們忽略其它欄位,如果使用者希望查看關於編碼的問題,他希望不管是在標題、摘要還是內容中只要包含他輸入的資訊都應該能夠查詢出來,這時候就需要在多個欄位中查詢。關鍵代碼如下:<p>請輸入要查詢的關鍵字:</p><form action="select.jsp" method="POST"> <p><input type="text" name="condition" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重寫" name="B2"></p></form>查詢的處理代碼如下:<%@ page contentType="text/html;charset=gb2312"%><% StringBuffer sql=new StringBuffer(); //查詢字串 String condition =request.getParameter("condition"); //查詢的條件 if(condition==null||condition.length()==0) { out.println("請輸入查詢條件!"); } else { sql.append("select * from user where title like '%"); sql.append(condition); sql.append("%' and summary like '%"); sql.append(condition); sql.append("%' and detail like '%"); sql.append(condition); sql.append("%'"); } //接下來根據上面產生的sql進行查詢即可%>
根據任意欄位查詢可以讓使用者選擇根據什麼進行查詢,然後輸入要查詢的值,這樣的查詢比較複雜,但是對於使用者來說最方便。處理檔案:<%@ page contentType="text/html;charset=gb2312"%><% StringBuffer sql=new StringBuffer(); //查詢字串 String condition = request.getParameter("condition"); //查詢的欄位 String v = request.getParameter("v"); //查詢的值 if(v.length()==0) { out.println("請輸入查詢條件!"); } else { sql.append("select * from user where "); //根據使用者選擇的欄位進行處理 if(condition.equals("a")) sql.append(" a like '"); else if(condition.equals("b")) sql.append(" b like '"); else sql.append(" c like '"); sql.append(v); sql.append("'"); /* 如果介面中下拉式清單中的條件是資料庫中欄位的名字,上面的代碼會非常簡單: sql.append("select * from user where "); sql.append(condition); sql.append(" like '"); sql.append(v); sql.append("'"); */ } //接下來根據上面產生的sql進行查詢即可%>
任意組合查詢把所以可以查詢的欄位全部列出來,每個欄位對應一個輸入框,使用者可以根據某個欄位或者某幾個欄位進行查詢,需要根據什麼查詢,在相應的輸入框中輸入資訊即可。查詢的處理檔案:<%@ page contentType="text/html;charset=gb2312"%><% StringBuffer sql=new StringBuffer(); //查詢字串 String a = request.getParameter("a"); String b = request.getParameter("b"); String c = request.getParameter("c"); String d = request.getParameter("d"); //擷取使用者輸入的查詢條件 sql.append("select * from user where"); if(a.length()!=0) { sql.append(" a like '"); sql.append(a); sql.append("' and"); } if(b.length()!=0) { sql.append(" b like '"); sql.append(b); sql.append("' and"); } if(c.length()!=0) { sql.append(" c like '"); sql.append(c); sql.append("' and"); } if(d.length()!=0) { sql.append(" d like '"); sql.append(d); sql.append("' and"); } sql.trim(sql.length-3,3); //刪除最後的4個字母(" and") //接下來根據上面產生的sql進行查詢即可%>
多值查詢使用者在單個輸入框輸入多個資料進行查詢,可以查詢某個欄位同時包含多個關鍵字,例如查詢主題中既包含“java”又包含“C++”的記錄,或者一個數字區間,例如年齡在19和22之間的記錄,或者一個時間範圍,例如出生在1981年1月1日和1983年12月31日之間的記錄。這裡只介紹按照數字區間進行尋找的,其它情況的實現基本相同。處理檔案:<%@ page contentType="text/html;charset=gb2312"%><% StringBuffer sql=new StringBuffer(); //查詢字串 String condition = request.getParameter("condition"); //擷取查詢條件 int index = condition.indexof(" "); //尋找空格位置,空格作為兩個數位分隔字元 String min=condition.subString(1,index); //前面的值 String max=condition.subString(index+1,condition.length-1); //後面的值 try { Integer.parseInt(min); Integer.parseInt(max); }catch(Exception e) { out.println("輸入的資訊不合法!"); return; } sql.append("select * from user where age between "); sql.append(min); sql.append(" and "); sql.append(max); //構造查詢字串 //接下來根據上面產生的sql進行查詢即可%>