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);

 

转载于:https://www.cnblogs.com/iOcean/archive/2012/03/02/2377648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值