2016-04-15 2 views
0

Есть ли способ заказать набор данных с алфавитом в алфавитном порядке без чувствительности к регистру? Я нашел «COLLATE LOCALIZED», «COLLATE NOCASE», но «COLLATE LOCALIZED NOCASE» показывает ошибку (также в обратном порядке).Android SQLite ORDER BY COLLATE «NOCASE» и «LOCALIZED» вместе

Спасибо за любой ответ!

ответ

0

Я не нашел никакого простого способа. Я создал дополнительные столбцы таблицы сортировки, которые содержат нормализованные данные (отмечено here). Создан постоянным для нормированного столбцов таблицы имени префикса:

public static final String ASCII_PREFIX = "ascii_"; 

создал таблицу (для текстового столбца создать еще один столбец с префиксом):

String sql = "CREATE TABLE IF NOT EXISTS " + tableName + " ("; 
for(columnModel column: table.columns) { 
    if(column.position > 0){ sql += ", "; } 
    sql += column.dbName + " " + column.dbType; 
} 
for(columnModel column: table.columns) { 
    if(column.dbType.equals("TEXT")) { 
    sql += ", " + ASCII_PREFIX + column.dbName + " " + column.dbType; 
    } 
} 
sql += ")"; 
db.execSQL(sql); 

начинку измененных данные таблиц (добавить нормированные данные для специальной колонки):

//...cycle for data filling... 
ContentValues values = new ContentValues(); 
for(columnModel column: table.columns) { 
    values.put(column.dbName, valueStr); 
    if(column.dbType.equals("TEXT")){ 
     values.put(ASCII_PREFIX + column.dbName, normalize(valueStr)); 
    } 
} 
db.insert(tableName, null, values); 

, а затем я сортирую в качестве альтернативы для текстовых колонок:

//... in method for sorting... 
String orderBy; 
....     
if(column.dbType.equals("TEXT")) { 
    orderBy = ASCII_PREFIX + column.dbName; 
}else { 
    orderBy = column.dbName; 
} 
Смежные вопросы