2013-04-12 4 views
0

Создание таблицы в SQLite с именами столбцов, которая содержит специальный символ #.Escape специальный символ # в таблице условие условие

Не знаю, как избежать этого, чтобы SQLite распознал его.

Я нашел, что код выхода для #: %23. Так что я пытался сделать так:

condition = condition.replace("usernum#", "usernum%23"); 

где условием является SQLite условие типа строки, например, select * from users where id = '2' ORDER BY usernum#

Но выше способ дает SQLite исключение.

ЛОГ:

04-12 20:00:44.395: E/AndroidRuntime(8054): android.database.sqlite.SQLiteException: no such column: usernum (code 1): , while compiling: select * from Users WHERE id !=1 order by Type DESC, usernum%23 ASC 

Ошибка в этой строке:

Cursor curr = db.rawQuery("select " + fields + " from " + table + " "+ condition, null); 
+0

какое исключение вы получаете? –

+2

Я предполагаю, что вы используете rawQuery? (это usernum # столбец? серьезно?) – njzk2

+0

О, да, я использую rawquery. См. Мое обновление. –

ответ

0

04-12 20: 00: 44,395: Е/AndroidRuntime (8054): андроид .database.sqlite.SQLiteException: no такой столбец: usernum (код 1): при компиляции: выберите * from Users WHERE id! = 1 order by Type DESC, usernum% 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); 
+0

Не могу ли я сделать это взамен метода? Мое условие содержит большую последовательность ORDER BY, которая также является динамической и ее не просто «usernum #», а также весь этот код rawquery в методе, который принимает динамические параметры как «public Cursor getData (String fields, String table, String condition)) // код rawquery} ' –

+0

@SaurabhJain каждый столбец, содержащий специальный символ, должен быть заключен в двойные кавычки, как я упоминал. – Sajmon

+0

ОК, это нормально, но как получить поле 'id', как вы написали' String.valueOf (id) '. Мое это поле находится в строковой форме и внутри строки 'condition' метода getData. Должен ли я взять это оттуда в качестве подстроки? –

Смежные вопросы