Java 表条件子句中的转义特殊字符

Java 表条件子句中的转义特殊字符,java,android,escaping,special-characters,android-sqlite,Java,Android,Escaping,Special Characters,Android Sqlite,使用包含特殊字符的列名在SQLite中创建表 我不知道如何避免这种情况,以便SQLite能够识别它 我发现的转义码是%23。所以我试着这样做: condition = condition.replace("usernum#", "usernum%23"); 其中condition是string类型的SQLite条件,例如,从users中选择*,其中id='2'orderbyusernum 但是上面的方法给出了SQLite异常 日志: 错误在这一行: 04-12 20:00:44.395:E/A

使用包含特殊字符的列名在SQLite中创建表

我不知道如何避免这种情况,以便SQLite能够识别它

我发现的转义码是%23。所以我试着这样做:

condition = condition.replace("usernum#", "usernum%23");
其中condition是string类型的SQLite条件,例如,从users中选择*,其中id='2'orderbyusernum

但是上面的方法给出了SQLite异常

日志:

错误在这一行:

04-12 20:00:44.395:E/AndroidRuntime8054: android.database.sqlite.SQLiteException:没有这样的列:usernum代码 1:,编译时:从id为的用户中选择*=1按类型排序的订单 描述,用户数量%23 ASC

由于列包含特殊字符,解决方案是将其包装为双引号整个列,这样它就可以工作了

select * from test order by "username#" desc;
就你而言:

String query = "Select * from users where id = ? ORDER BY \"usernum#\"";
Cursor c = db.rawQuery(query, new String[] {String.valueOf(id)});
查询方法的解决方案:

String[] columns = {...};
String selection = idColumn + " = ?";
String[] args = {String.valueOf(id)};
String orderBy = "\"" + orderByColumn + "\"";
Cursor c = db.query(table, columns, selection, args, null, null, orderBy);

您得到的是哪种异常?我假设您使用的是rawQuery?usernum是一列吗?真的吗?哦,是的,我在用rawquery。查看我的更新。您可能可以用双引号引用它。对于一个,不要使用rawquerys。我不能在replace方法本身中这样做吗?我的条件是包含大的ORDER BY序列,它也是动态的,不仅仅是usernum,而且整个rawquery代码都是以动态参数作为公共游标getDataString字段、字符串表、字符串条件{//rawquery code}的方法@SaurabhJain每个包含特殊字符的列都需要像我提到的那样用双引号括起来。MyThis字段以字符串形式出现,它位于getData方法的条件字符串中。我需要把它作为子串吗?@SaurabhJain这只是想象的伪代码。由于您的id是字符串,您不需要再次将其转换为字符串,所以只需插入args only id即可。好的,现在我的查询这次毫无例外地运行了,但现在usernum周围出现了双引号。我只是喜欢:condition=condition.replaceusernum\usernum\;条件查询变成:WHERE id=1按类型DESC、ASC、usernum、Name DESC排序。知道如何删除条件字符串(即usernum)中的双QOUTE吗?
String query = "Select * from users where id = ? ORDER BY \"usernum#\"";
Cursor c = db.rawQuery(query, new String[] {String.valueOf(id)});
String[] columns = {...};
String selection = idColumn + " = ?";
String[] args = {String.valueOf(id)};
String orderBy = "\"" + orderByColumn + "\"";
Cursor c = db.query(table, columns, selection, args, null, null, orderBy);