Android Sqlite按desc排序不正确

3

我对Android和Sqlite数据库编程非常陌生。 我想倒序排列我的游戏分数列。游戏得分列的类型是实数,当我尝试按gpoint和desc排序时,并没有正确地工作。请给我一些建议。代码如下:

public List<Score> getAllScores() {
            List<Score> scoreList = new ArrayList<Score>();
            String selectQuery = "SELECT  * FROM " + TABLE_SCORES+" ORDER BY gpoint DESC";

            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);

            if (cursor.moveToFirst()) {
                do {
                    Score score = new Score();
                    score.setID(Integer.parseInt(cursor.getString(0)));
                    score.setPoint(cursor.getFloat(1));
                    score.setLetter(cursor.getString(3));
                    score.setDate(cursor.getString(2));
                    scoreList.add(0, score);
                } while (cursor.moveToNext());
            }

            return scoreList;
        }

我的测试插入内容如下:

            Calendar c = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
        String formattedDate = df.format(c.getTime());

        Log.d("Insert: ", "Inserting .."); 
        db.addScoreToDB(new Score((float)9.4, "S",formattedDate));        
        db.addScoreToDB(new Score((float)7.5, "S",formattedDate));        
        db.addScoreToDB(new Score((float)6.6, "S",formattedDate));        
        db.addScoreToDB(new Score((float)8.8, "S",formattedDate));        
        db.addScoreToDB(new Score((float)9.7, "S",formattedDate));
        db.addScoreToDB(new Score((float)11.1, "S",formattedDate));
        db.addScoreToDB(new Score((float)2.1, "S",formattedDate));
        db.addScoreToDB(new Score((float)10.1, "S",formattedDate));

结果为:

12-24 15:52:24.065: D/插入:(9901):正在插入.. 12-24 15:52:24.290: D/读取:(9901):正在读取所有联系人..
Id: 8 ,分数: 10.1 ,字母: S
Id: 6 ,分数: 11.1 ,字母: S
Id: 7 ,分数: 2.1 ,字母: S
Id: 3 ,分数: 6.6 ,字母: S
Id: 2 ,分数: 7.5 ,字母: S
Id: 4 ,分数: 8.8 ,字母: S
Id: 1 ,分数: 9.4 ,字母: S
Id: 5 ,分数: 9.7 ,字母: S

我想要的结果是:2.1,6.6,7.5.....以此类推


你使用rawquery而不是select有什么原因吗?在选择时,通常会使用getReadableDatabase()。类似于getReadableDatabase().query(TABLE_SCORES, null, null, null, null ,null, "gpoint desc"); - Toon Borgers
3个回答

6
“我希望得到的结果是:2.1、6.6、7.5等等。这是升序排列,而不是降序排列。升序是默认排序方式,但您也可以指定按列升序排序,方法是使用ORDER BY column ASC。”
Id: 8 ,Score: 10.1 ,Letter: S
Id: 6 ,Score: 11.1 ,Letter: S
Id: 7 ,Score: 2.1 ,Letter: S 
Id: 3 ,Score: 6.6 ,Letter: S 
Id: 2 ,Score: 7.5 ,Letter: S 
Id: 4 ,Score: 8.8 ,Letter: S 
Id: 1 ,Score: 9.4 ,Letter: S 
Id: 5 ,Score: 9.7 ,Letter: S

这是按字典顺序(按字母表顺序)排序的升序。如果您想进行数字排序,请将gpoint列类型设置为REAL或将值转换为REAL

CREATE TABLE ... (... gpoint REAL ...)

或者

SELECT ... ORDER BY CAST(gpoint AS REAL)

选择 ... 按 CAST(gpoint AS REAL) 排序,这是我的解决方案!!! 现在一切都正常工作。 - Munkhdemberel L

2

请更改此查询:

String selectQuery = "SELECT  * FROM " + TABLE_SCORES+" ORDER BY gpoint DESC";

将G点转换为实数。

String selectQuery = "SELECT  * FROM " + TABLE_SCORES+" ORDER BY cast(gpoint as REAL) DESC";

我希望这对您有所帮助。


0

试一下 return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_TIME, KEY_CATEGORY, KEY_ALARM}, null, null,null,null,KEY_TIME+" DESC");


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