Android內置數據庫sqlite執行insert,單引號報錯問題的解決


轉載請注明出處,謝謝~http://www.cnblogs.com/iOcean/archive/2012/03/02/2377648.html

 

1.問題描述

   

SQLiteDatabase mDB = this.getWritableDatabase();
String insertStr = "insert into mTable(id,name,age,phone) values(1,'iOcean's','80','110')";
mDB.execSQL(insertStr);

 注:數據可能是server拿來的數據,為說明問題此處臨時寫死的。

當執行該代碼時后台就會報異常如下:

insert Exception:android.database.sqlite.SQLiteException: near "s": syntax error: insert into mTable(id,name,age,phone) values(1,'iOcean's','80','110')

    很明顯,是因為單引號引起的。

 

2.解決方法:

先是考慮的可不可以手動轉義后insert,但是簡單的使用String的replace方法不行,仍會報錯

str.replace("'", "\\\\'");就算這種方法可行,但是引起問題的還有可能是其他字符,所以這種思路比較麻煩。那就換換嘍^_^

 

后來查資料發現,SQLiteDatabase類的execSQL方法有兩個,上面是其一execSQL (String sql),而另一個為execSQL (String sql, Object[] bindArgs)

而該方法支持使用占位符參數(?),所以試試嘍,結果該方法對特殊字符通吃,嘛4么有,呵呵~

所以代碼可以這樣了:

SQLiteDatabase mDB = this.getWritableDatabase();
String insertStr = "insert into mTable(id,name,age,phone) values(?,?,?,?)";
Object[] mValue = new Object[]{1,"iOcean's","80","110");
mDB.execSQL(insertStr, mValue);

 


免責聲明!

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



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