从android数据库中检索数据时的奇怪顺序

时间:2016-05-28 15:22:22

标签: android sqlite

我试图使用SQLDatabase.query方法从我的数据库中获取数据:

public Cursor getList() {
    DataProvider.DBHelper mDBHelper = DataProvider.getDBHelper();
    SQLiteDatabase db = mDBHelper.getWritableDatabase();
    return db.query(ShotsTable.TABLE_NAME, 
                    new String[]{ShotsTable.JSON}, 
                    null, 
                    null, 
                    null, 
                    null, 
                    ShotsTable.VIEWS + " DESC");
}


private List<Shots> getAllFromDB() {
    Gson gson = new Gson();
    Cursor cursor = new ShotsDataHelper().getList();
    List<Shots> data = new ArrayList<>();
    if (cursor.moveToFirst()) {
        do {
            data.add(gson.fromJson(cursor.getString(cursor.getColumnIndex(ShotsDataHelper.ShotsTable.JSON)),
            Shots.class);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return data;
}


public void insert(Shots shots) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(ShotsTable.ID, shots.getId());
    contentValues.put(ShotsTable.VIEWS, Integer.valueOf(shots.getViews_count()));
    contentValues.put(ShotsTable.COMMENTS, Integer.valueOf(shots.getComments_count()));
    contentValues.put(ShotsTable.LIKES, Integer.valueOf(shots.getLikes_count()));
    contentValues.put(ShotsTable.JSON, shots.getJson());
    insert(contentValues);      // insert into database using getContentResolver().insert(getContentUri(), contentValues);
}

这是我的表:

SQLiteTable TABLE = new SQLiteTable(TABLE_NAME)
                    .addColumn(ID, Column.DataType.TEXT)
                    .addColumn(VIEWS, Column.DataType.INTEGER)
                    .addColumn(COMMENTS, Column.DataType.INTEGER)
                    .addColumn(LIKES, Column.DataType.INTEGER)
                    .addColumn(JSON, Column.DataType.TEXT);

但是,当应用程序从数据库加载数据时,它会成功检索数据,但这里的顺序很奇怪(按照我认为的视图排序),列表如下所示(下面列出的VIEWS,从方法getAllFromDB()返回以上):

976

958

956

927

925

903

2115

1978

1936

1589

1574

1487

1363

1298

1265

1210

1130

1106

1104

1081

getList()中的Cursor包含mQuery:&#34; SQLiteQuery:SELECT json FROM shots ORDER by views DESC&#34;

我想知道我是否对数据库做了一些错误的操作,但是这里的数据的desc顺序真的很奇怪,对于views_count小于1000的数据,它们有一个desc顺序,而对于views_count大于1000的数据,它们是也有一个desc命令。

3 个答案:

答案 0 :(得分:0)

你应该发布一点,哪个查询返回哪个输出。 您粘贴的此输出可能适合您的数据顺序,这是您的案例字符串中的ID(我不建议这样做(long是更合适的类型,但如果你知道你在做什么就可以))。

因此显示的数字按字母顺序排序;所以订单工作正常。因为'1'的asci值是情人,然后是'9'的值,所以数字19999将出现在9号之前。

答案 1 :(得分:0)

尝试将json列类型更改为整数,或使用以下内容:

按顺序排序(json AS int)

答案 2 :(得分:0)

我讨厌回答自己,但我真的在这里犯了一个愚蠢的错误。我忘记更新表,以便查询可以按VIEWS列将数据集排序为TEXT,而不是INTEGER。更改表后,它可以正常工作。