返回不区分大小写的sqlite数据库

3

我正在思考如何在不区分大小写的情况下对我的数据库进行排序。 比如说,我有'A'、'a'、'B'、'b'。它会按照这样的顺序打印出来:'A'、'B'、'a'、'b'。但是我希望以更加人性化的方式进行排序。 这是我的Cursor函数:

/**
* 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,但是如果它是解决这个问题的方案,我不知道如何实现它。 有没有人可以帮助我解决这个问题?

3个回答

5

这个问题已经在这里有了解答。 不幸的是,似乎你必须使用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);

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

3
尝试使用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);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接