2012-06-03 61 views
2

我坐在这里想知道如何在不区分大小写的情况下对数据库进行排序。 假设我有'A','a','B','b'。它将如此打印:'A','B','a','b'。但我希望它以更人性化的方式排序。 这是我的光标功能:返回不区分大小写的sqlite数据库

/** 
* Return a Cursor over the list of all brands in the database 
* 
* @return Cursor over all brands sorted alphabetically 
+ TODO: doesn't sort alphabetically because it's case sensitive 
*/ 
public Cursor fetchAllBrands() { 

return mDb.query(Constants.DATABASE_TABLE, 
    new String[] { 
     Constants.KEY_ROWID, Constants.KEY_BRAND, Constants.KEY_STOCK 
    }, 
    null, null, null, null, Constants.KEY_BRAND); 
} 

我已经注意到,Java有CASE_INSENSITIVE_ORDER,但我不知道如何实现它,如果这是解决这个问题。 任何人都可以帮助我吗?

回答

4

有人回答了here。 不幸的是,似乎您必须使用rawQuery()方法,而不是使用query()包装方法。这种方法允许你将像这样被执行原始输入SQL代码...

db.rawQuery("SELECT " + Constants.KEY_ROWID + "," + Constants.KEY_BRAND + "," + 
      Constants.KEY_STOCK + 
      " FROM " + Constants.DATABASE_TABLE + 
      " ORDER BY " + Constants.KEY_BRAND + " COLLATE NOCASE ASC;", null); 
+0

我希望我不必使用rawQuery。但我想这就是我必须要做的。感谢您的回复 - 我会在几个小时后回家测试它。 – ringkjob

2

使用COLLATE NOCASE尝试rawQuery(...)。示例...

return mDb.rawQuery("SELECT " + Constants.KEY_ROWID + "," 
       + Constants.KEY_BRAND + "," 
       + Constants.KEY_STOCK 
       + " FROM " + Constants.DATABASE_TABLE 
       + " ORDER BY " + Constants.KEY_BRAND + " COLLATE NOCASE", null); 
+0

感谢您的回答! – ringkjob

1

尝试这样

public Cursor fetchAllBrands() { 

return mDb.query(Constants.DATABASE_TABLE, 
new String[] { 
    Constants.KEY_ROWID, Constants.KEY_BRAND, Constants.KEY_STOCK 
}, 
null, null, null, null, Constants.KEY_BRAND + " COLLATE NOCASE ASC"); 
} 
相关问题