我试图使用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命令。
答案 0 :(得分:0)
你应该发布一点,哪个查询返回哪个输出。 您粘贴的此输出可能适合您的数据顺序,这是您的案例字符串中的ID(我不建议这样做(long是更合适的类型,但如果你知道你在做什么就可以))。
因此显示的数字按字母顺序排序;所以订单工作正常。因为'1'的asci值是情人,然后是'9'的值,所以数字19999将出现在9号之前。
答案 1 :(得分:0)
尝试将json列类型更改为整数,或使用以下内容:
按顺序排序(json AS int)
答案 2 :(得分:0)
我讨厌回答自己,但我真的在这里犯了一个愚蠢的错误。我忘记更新表,以便查询可以按VIEWS列将数据集排序为TEXT,而不是INTEGER。更改表后,它可以正常工作。