我的app app中有一个查询,如下所示
SELECT N.NOME AS NUTRIENTE FROM NUTRIENTES WHERE CODNUTRIENTE IN (" + nutrientes + ") ORDER BY N.NOME COLLATE NOCASE
返回结果
Cálcio
ED Suinos
Fibra Bruta
Fósforo
Gordura
Lisina
Metionina
Proteina
Sódio´
Ácido
Triptofano
但它应该以正确的顺序返回
Ácido
Cálcio
ED Suinos
Fibra Bruta
Fósforo
Gordura
Lisina
Metionina
Proteina
Sódio
Triptofano
任何人都可以帮助我或给出指示或文档阅读,我在sqlite ofical网站搜索答案但我没有找到任何东西。 我创建数据库
公共类MySQLiteHelper扩展了SQLiteOpenHelper {
private static Context context;
public static final String TABLE_NUTRIENTES = "NUTRIENTES";
public static final String CREATE_TABLE_NUTRIENTES = "CREATE TABLE NUTRIENTES ( "
+ " CODNUTRIENTE INTEGER primary key autoincrement, "
+ " NOME VARCHAR(25) , "
+ " CODUNIDADE INTEGER, "
+ " COMENTARIO VARCHAR(1000) , "
+ " MULTIPLICADOR REAL, "
+ " VISIVEL INTEGER, "
+ " TRAVADO INTEGER, "
+ " FOREIGN KEY (CODUNIDADE) REFERENCES UNIDADES (CODUNIDADE) ON UPDATE CASCADE "
+ " ); ";
private static String DATABASE_NAME = ((Config)Config.getInstance(context)).getValue("BancoDeDados") + ".db";
private static final int DATABASE_VERSION = 1;
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context=context;
}
public MySQLiteHelper(Context context, String nomeBanco) {
super(context, nomeBanco + ".db", null, DATABASE_VERSION);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase database) {
if (!database.isReadOnly()) {
database.execSQL("PRAGMA foreign_keys=ON;");
}
criaTabelas(database);
preencheNutrientes(database);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NUTRIENTES);
onCreate(db);
}
public void criaTabelas(SQLiteDatabase database) {
database.execSQL(CREATE_TABLE_NUTRIENTES);
}
public void preencheNutrientes(SQLiteDatabase database) {
List<String[]> valueslist = Util.readCsv(context,"nutrientes.csv");
for(String[] dados: valueslist){
ContentValues insertValues = new ContentValues();
insertValues.put("CODNUTRIENTE",dados[0]);
insertValues.put("NOME",dados[1]);
insertValues.put("CODUNIDADE",dados[3]);
insertValues.put("COMENTARIO",dados[2]);
insertValues.put("MULTIPLICADOR",dados[4]);
insertValues.put("VISIVEL",dados[5]);
insertValues.put("TRAVADO",dados[6]);
database.insert("NUTRIENTES", null, insertValues);
}
}
@SuppressLint("Override")
public static String getDatabaseName() {
return DATABASE_NAME;
}
@Override
public void onOpen(SQLiteDatabase db) {
if (!db.isReadOnly()) {
db.execSQL("PRAGMA foreign_keys=ON;");
}
super.onOpen(db);
}
public static void changeDatabase(String nomeBD) {
DATABASE_NAME = nomeBD + ".db";
}
}
答案 0 :(得分:0)
我打算给你答案,但我发现我遇到了同样的问题。无论如何,我刚刚找到了解决办法:)。
您只需在表格的定义中添加COLLATE LOCALIZED
即可。 VARCHAR(25) COLLATE LOCALIZED
使用TEXT COLLATE LOCALIZED
或NOME
。
请记住,您需要重新创建数据库以应用此更改或在onUpgrade
函数中编写相应的代码。
通过这样做,您无需在COLLATE
声明中使用SELECT
。