2016-04-15 7 views
0

Gibt es eine Möglichkeit, Datensatz mit Gebietsschema alphabetischer Reihenfolge ohne Berücksichtigung der Groß-/Kleinschreibung zu bestellen? Ich habe gefunden "COLLATE LOKALISIERT", "COLLATE NOCASE", aber "COLLATE LOKALISIERTE NOCASE" zeigt Fehler (auch in umgekehrter Reihenfolge).Android SQLite ORDER BY COLLATE "NOCASE" und "LOCALIZED" zusammen

Danke für jede Antwort!

Antwort

0

Ich habe keinen einfachen Weg gefunden. Ich habe zusätzliche Spalten in der Sortierungstabelle erstellt, die normalisierte Daten enthalten (notiert here). Erstellt Konstante für normalisierte Tabellenspalten Namensprefix:

public static final String ASCII_PREFIX = "ascii_"; 

erstellte Tabelle (für Textspalte eine weitere Spalte mit Präfix erzeugen):

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

geänderten Daten Fülltisch (normalisierten Daten für spezielle Spalte hinzugefügt werden):

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

und dann ich irgendwie alternativ für Textspalten:

//... in method for sorting... 
String orderBy; 
....     
if(column.dbType.equals("TEXT")) { 
    orderBy = ASCII_PREFIX + column.dbName; 
}else { 
    orderBy = column.dbName; 
} 
Verwandte Themen