Android: ORDER BY в запросе
У меня есть приложение для Android с использованием локальной базы данных sqlite.
private SQLiteDatabase mDb;
когда я запускаю этот запрос, я получаю свой курсор по строкам с pid, равным id, по желанию:
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, null);
когда я запускаю следующий запрос, стремясь получить тот же набор результатов, упорядоченный pid, я получаю " android.database.sqlite.SQLiteException: несоответствие типа данных"
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC");
Любые идеи?
Ответы
Ответ 1
Похоже, вы немного перепутались. Согласно документации SQLiteDatabase.query
, последний аргумент - это предложение LIMIT
. Вторым последним является предложение ORDER BY
.
Cursor query (boolean distinct,
String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy, // <-- ORDER BY
String limit)
ИЗМЕНИТЬ
Но есть еще один SQLiteDatabase.query
, где ORDER BY
будет последним
Cursor query (String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy)
Ответ 2
Это сработало для меня
String filter = MySQLiteHelper.JOB_ID + "=" + Integer.toString(jobID);
String orderBy = MySQLiteHelper.LOG_TIME + " DESC";
Cursor cursor = database.query(MySQLiteHelper.LOG_TABLE_NAME, logTableColumns,
filter, null, null, null, orderBy);
Ответ 3
KEY_PID + " = " + "'" + id + "'"
Ответ 4
Так как Orderby является вторым последним параметром в запросе;
ваш запрос будет таким:
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, KEY_PID+" DESC", null);
Ответ 5
Если я правильно понял вашу проблему, попробуйте это.
String[] columns = new String[] {KEY_PID, KEY_TID};
String where = KEY_PID + " = " + Integer.toString(id);
String orderBy = KEY_PID + " DESC";
Cursor cursor = mDb.query(PT_TABLE, columns, where, null, null, null, orderBy);