SQLite针对特殊字符进行转义操作
Android SQLite在使用一些特殊字符时,会报android.database.sqlite.SQLiteException异常,如下几种情况:
String name1 = "account's888"; String sql1 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account[s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account]s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account%s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account$s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account(s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "account)s888"; String sql2 = "select * from user where loginname like '%" + name +"'%"; String name2 = "_accounts888"; String sql2 = "select * from user where loginname like '%" + name +"'%";
执行以上语句将会发生异常,导致应用崩溃。sqlite不支持特殊字符,对于特殊字符都需要进行转义操作。需要进行转义的原因是,类似%、_、[、]、(、)、”、’、””、” 等特殊字符都会在特定情况阻断SQL语句,导致无法正常执行。
在like谓词查询中,会使用到两个通配符:“%”和“_”、,其中“%”表示零个或任意多个字符,“_”表示任意一个字符,但如果查询的条件表达式中出现了“%”和“_”,就需要对其进行转义。除此之外,特殊字符“‘”,若出现在查询表达式中,也需要进行转义,其转义方式和以上两个字符的转义方式有些差别。下面以示例简单说明:
1、对”%”的转义
select * from student where description like ‘%!%%’ escape ‘!’
本sql解释为取出表student中所有字段description中含有”%”的记录。
2、对”_”的转义
select * from students where description like ‘%!_%’ escape ‘!’
本sql解释为取出表student中所有字段description中含有”_”的记录。
3、对”‘”的转义
select * from students where description like ‘%”%”
本sql解释为取出表student中所有字段description中含有”‘”的记录。
比较以上3条sql,不难看出,对于“%”和“_”需要指定一个转义字符,用关键字escape说明。例子中使用了‘!’,但你可以使用其它字符,比如字母a-z(大小写任意),或者数字0-9和其它字符等。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。