實現模糊查詢時對特殊字元進行處理和對查詢結果進行處理
private class SearchByResumeRowMapper implements RowMpper<List<Info>> { private String name; public SearchByResumeRowMapper(String name) { this.name = name.replace("%",""); } @Override public List<Info> mapperRow(ResultSet rs) throws SQLException { List<Info> list = new ArrayList<Info>(); while(rs.next()){ Info info = new Info(); info.setTypeName(rs.getString("typeName")); info.setAuther(rs.getString("auther")); info.setResume((rs.getString("resume")).replace(name, "<b style=\"color:red\">" + name + "</b>")); info.setOrigin(rs.getString("origin")); info.setPublishDate(rs.getString("publishDate")); info.setTitle(rs.getString("title")); list.add(info); } return list; } }
這裡我只貼出來了RowMapper這個類。
這時問題來了,如果我們在頁面上的查詢條件寫成“%”或者是“_”,這時查出來的結果就會出問題。原因是我們沒有對模糊查詢的特殊字元進行處理,所以對sql進行改進:
SELECT 欄位 FROM info WHERE param LIKE ? ESCAPE '\\';
這句sql的ESCAPE的意思是對\後面的一個字元只當成普通字元處理(sql語句中用兩個反斜槓是因為轉義字元,其實就是一個反斜槓)。比如SELECT 欄位 FROM info WHERE param LIKE '%\\%%' ESCAPE '\\';這句話的意思是查詢含有%的param欄位。(為了避免java轉義字元反斜槓造成程式的混亂 這裡我們可以用別的字元 比如正斜槓。樓主這裡用的是反斜槓)。下面是改良過後的程式碼:
在servlet裡對特殊字元進行處理
content = content.replace("\\", "\\\\");
content = content.replace("_", "\\_");
content = content.replace("%", "\\%");
content = content.replace("[", "\\[");
content = content.replace("]", "\\]");
然後下邊是改良後的RowMapperprivate class SearchByResumeRowMapper implements RowMpper<List<Info>> { private String name; public SearchByResumeRowMapper(String name) { String tmp = name.substring(1,name.length()-1); //deal the "_","%","[","]","\" in result and the sequence can't be changed! //English of Chinese boy... sorry... tmp = tmp.replace("\\_", "_"); tmp = tmp.replace("\\%", "%"); tmp = tmp.replace("\\[", "["); tmp = tmp.replace("\\]", "]"); tmp = tmp.replace("\\\\", "\\"); this.name = tmp; } @Override public List<Info> mapperRow(ResultSet rs) throws SQLException { List<Info> list = new ArrayList<Info>(); while(rs.next()){ Info info = new Info(); info.setTypeName(rs.getString("typeName")); info.setAuther(rs.getString("auther")); info.setResume((rs.getString("resume")).replace(name, "<b style=\"color:red\">" + name + "</b>")); info.setOrigin(rs.getString("origin")); info.setPublishDate(rs.getString("publishDate")); info.setTitle(rs.getString("title")); list.add(info); } return list; } }
當然了 這只是一個很簡單的小功能,但是覺得收穫也挺大的,所以記錄一下。
把程式碼放到github上了,有興趣的可以看看,並不是正經專案就是一個課設。所以程式碼有些簡陋。。。
點選檢視程式碼相關推薦
實現模糊查詢時對特殊字元進行處理和對查詢結果進行處理
最近正處於期末考試周,部落格好久沒有更新。而且程式碼也寫的比較少所以也不知道有什麼好東西分享給大家。在這次的課程設計中老師佈置了一個完成資訊檢索的作業,我是用網頁實現的。功能比較簡單寫了將近半天的時間就完成功能,但是我還有點意猶未盡的感覺所以自己又完善了一下細節。然後我注意到如果在實際開發中,我們要用模糊查詢
js/jquery對特殊字元進行轉義防止js注入使用示例
/** JQuery Html Encoding、Decoding * 原理是利用JQuery自帶的html()和text()函式可以轉義Html字元 * 虛擬一個Div通過賦值和取值來得到想要的Html編碼或者解碼 */ <script src="https://cdn.b
使用jquery ajax對特殊字元進行轉義,防止js注入
在使用ajax進行留言的時候,出現了一個問題.因為留言內容寫完之後,通過ajax提交內容,同時使用js把留言的內容新增到頁面上來.瀏覽留言的時候也是通過ajax請求,然後再顯示的.這樣,如果有人在留言裡寫入了js語句,這結語句都會被執行.解決辦法就是對這些特殊字元進行轉義再
使用jquery對特殊字元進行轉義,防止js注入
使用ajax進行留言的時候,出現了一個問題.因為留言內容寫完之後,通過ajax提交內容,同時使用js把留言的內容新增到頁面上來.瀏覽留言的時候也是通過ajax請求,然後再顯示的.這樣,如果有人在留言裡寫入了js語句,這結語句都會被執行.解決辦法就是對這些特殊字元進行轉義再顯示出來.如果在jsp中使用jstl
JSON中對特殊字元的處理
在前臺通過textarea儲存資料到後臺資料庫時,如果資料中存在回車符等特殊字元時,就無法把資料封裝成json資料傳到前臺顯示,這時需要在傳回前臺之前轉義或替換資料中的特殊字元,然後在拼接封裝成json資料。替換方法如下: /** * 處理json中的特
iOS Http傳輸過程中對特殊字元的處理
在進行http傳輸的過程,如果有特殊的符合,例如“+,&。*”,不會進行處理,都直接替換掉了。 原因:預設的系統不會對這些特殊符號進行轉義,只會進行替換 解決辦法:在post之前對這些特殊符
JAVA對特殊字元的處理
最近在維護OA系統的時候,剛好遇到幾個類似的問題。總結了一下大概是下面三種情況。1.在拼接原生SQL的時候,特殊字元如【'】,破壞了SQL的完整性。public String escapeExprSpecialWord(String keyword) { if
關於gson對特殊字元的處理
gson的坑: gson會預設將特殊字元轉化成unicode編碼 Gson gson = new GsonBuilder().disableHtmlEscaping().create();// Gs
xml 對特殊字元的處理(新增cdata標籤)
有時候會在xml裡新增包含類似'&'的特殊字元,這樣在進行XML解析時會導致錯誤解析得到不正確的資訊,故而有必要針對這些特殊字元進行處理.利用cdata標籤,這樣xml在解析時就不會錯誤判斷了
php對特殊字元的處理
在magic_quotes_gpc=On的情況下,如果輸入的資料有單引號(’)、雙引號(”)、反斜線()與 NUL(NULL 字元)等字元都會被加上反斜線。這些轉義是必須的,如果這個選項為off,那麼我們就必須呼叫addslashes這個函式來為字串增加轉義。正是因為這個選項必須為On,但是又讓使用者進行配置
從Cookie 中取出來對特殊字元的轉換
頁面存入Cookie中的值含有特殊字元,但所傳的值中包含一些特殊字元比如“:”,Cookie中是無法對特殊字元直接承載的,所以在存入Cookie時,將其轉換為unicode編碼: document.cookie = key + "=" + escape(value);
JAVA中URLEncoder函式對特殊字元不處理解決辦法
最近做登陸這一塊的介面,需要對接另外一家公司php的登陸介面,由於他們的賬號密碼包含了有特殊字元*,經過了很多的曲折,特記錄下來。 特殊字元*,在java中encode函式是不會進行轉碼處理。
PHP對錶單提交特殊字元的過濾和處理
PHP關於表單提交特殊字元的處理方法做個彙總,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_string等幾個函式聯合使用,與大家共同交流。 一、幾個與特殊字元處理有關的
正則表示式:Notepad++查詢兩段特殊字元之間文字並在該目標字元後面新增字元
今日在工作中使用Notepad++處理json檔案時遇到一個正則表示式查詢並新增字元的問題: 問題描述: 我們工作團隊人員需要遷移一個平臺的文章內容到另一個平臺,使用富文字編輯器進行復制遷移,其中文字連結需要手工新增,但由於提前沒做要求,大家都沒有設定連結的跳轉目標頁,也就
指標系統學習5-對使用字元指標變數和字元陣列的討論
雖然用字元陣列和字元指標變數都能實現字串的儲存和運算,但它們二者之間是有區別的,不應混為一談……主要概括起來有以下幾點:1. 字元陣列由若干個元素組成,每個元素中 放一個字元,而字元指標變數中存放的是地址(字串第1個字元的地址),決不是將字串放到字元指標變數中。 2. 賦值方式。對字元陣列只能對
Java——實現氣泡排序,選擇排序,快速排序和二分查詢
在學習C語言時,對排序演算法和二分查詢有一定的理解並進行了實現。 不過打算用Java重新實現一下氣泡排序(Bubble Sort),選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(binary_search)。 package pra
將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理和 對位元組陣列字串進行Base64解碼並生成圖片
public static String imageToBase64(String path) { // 將圖片檔案轉化為位元組陣列字串,並對其進行Base64編碼處理 byte[] data = null; // 讀取圖片位元組
JS對HTML字元的轉義和反轉義
var HtmlUtil = { /*1.用瀏覽器內部轉換器實現html轉碼*/ htmlEncode:function (html){ //1.首先動態建立一個容器標籤元素,如DIV var temp = document.c
Order by 和 group by 的聯合使用 並對某一欄位中的不同結果進行重新命名和自由排序
最需要注意的一點就是 group by 必須包含在 roder by 子句中 如: SELECT replace(replace(replace(replace(jb,'1','一級'),'2','二級'),'3','三級'),'4','四級')jb,ysxm
Day28:面向對象編程——類和對象
軟件 聲明 關於 main 部分 一個 自動 個人 rgs 一、面向對象的程序設計 在此之前用到的事面向過程的程序設計,它的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比設計好一條流水線,考慮周全什麽時候處理什麽東西。 優點:極大的降低了程序