android之Android中的SQL查詢語句LIKE綁定參數問題解決辦法(sqlite數據庫)


由於考慮到數據庫的安全性,不被輕易SQL注入,執行查詢語句時,一般不使用直接拼接的語句,而是使用參數傳遞的方法。然后在使用參數傳遞的方法中時,發現當使用like方式查詢數據時,很容易出現一個問題。

錯誤案例:

 

復制代碼代碼如下:
String myname = "abc";
String sql = "select * from mytable where name like '?%'";
Cursor cursor = db.rawQuery(sql, new String[]{myname};


運行提示如下錯誤:

復制代碼代碼如下:
java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.

 

根據錯誤提示可知,sql語句中的?號沒有被識別出來,從而new String[]{myname}沒法替代sql中的?號。?號沒有被識別出來的原因估計是?號外有單引號,但是在sql中like語句的值和%號需要用引號圍着。

為了解決sql中?號無法識別,必須去掉?號外的引號,那么%號也需要去掉。所以,得在后面代替?號的參數中添加上%號。

所以,正確的案例如下:

復制代碼代碼如下:

String myname = "abc";
String sql = "select * from mytable where name like ?";
Cursor cursor = db.rawQuery(sql, new String[]{myname+"%"};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM