У вас, похоже, есть несколько проблем.
Выпуск 1
Аргументы выбора, 4-й параметр запроса , должны быть String[]
, а не String
.
т.е..
public Cursor query (String table,
String[] columns,
String selection,
String[] selectionArgs, //<<<<<<<<<<
String groupBy,
String having,
String orderBy)
Попробуйте использовать: -
String selection = TaskEntry.COLUMN_CATEGORY_ID + " = ?";
String[] selectionArgs = new String[]{Integer.toString(mId)};
Cursor taskCursor = mDb.query(TaskEntry.TABLE_NAME, null, selection,
selectionArgs, null, null, null, null)
Выпуск 2
Поскольку вы определили столбец category_id без TYPE, используется сходство типов по умолчанию NUMERIC, и вы, к сожалению, столкнулись с нюансом, в котором имеет значение AFFINITY TYPE.
Короче говоря, вы должны применять подходящий тип столбца (INTEGER будет правильным, хотя TEXT также будет работать) в качестве такого использования: -
public static final String SQL_CREATE_TABLE = "CREATE TABLE " +
TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY, " +
COLUMN_TASK_NAME + " TEXT UNIQUE NOT NULL, " +
COLUMN_CATEGORY_ID + " INTEGER , " + //<<<<<<<<<<
COLUMN_SKILL_ID + " INTEGER, " + //<<<<<<<<<<
COLUMN_TASK_PD + ", " +
COLUMN_TASK_DATE + ", " +
COLUMN_TASK_PERIOD + ", " +
COLUMN_TASK_FREQUENCY + ", " +
COLUMN_TASK_ONBY + ", " +
COLUMN_TASK_COMPLETION + ")";
- предлагается включить ожидаемый тип для всех столбцов.
Обратите внимание, что для запуска вышеупомянутого вам нужно будет удалить базу данных или удалить таблицу. Это может быть достигнуто путем выполнения 1 из следующих
- удаление приложения и повторный запуск или
- очистка данных приложения с последующим повторным запуском или
- IF метод onUpgrade был надлежащим образом закодирован, после чего можно увеличить номер версии базы данных (4-й параметр супер-вызова SQLiteOpenHelper).
- для соответствующей кодировки потребуется, чтобы он отбросил таблицу и затем создал таблицу (обычно таблицы удаляются, а затем вызывается метод onCreate)
Если вы не можете позволить себе потерять данные, вам необходимо переименовать таблицу (используя ALTER TABLE), а затем создать ее и затем загрузить данные из переименованной исходной таблицы.
Проблема 2 - Альтернативное решение
Альтернативой изменению столбца TYPE может быть использование CAST для принудительной привязки типа, например Вы можете использовать: -
String selection = TaskEntry.COLUMN_CATEGORY_ID + " = CAST(? AS INTEGER)";
или
String selection = "CAST(" + TaskEntry.COLUMN_CATEGORY_ID + " AS INTEGER)=?";
- Использование любого из вышеперечисленных не требует воссоздания таблицы, но не является предпочтительным методом, так как это грязный .