#android #sql #select #where
#Android #sql #выберите #where-предложение
Вопрос:
Я полный новичок в программировании, и у меня возникли проблемы с реализацией запроса SELECT с WHERE year_id = ‘переменная выбранного года’ для отображения результатов в виде списка. Мой код, как показано ниже, отображает все записи, хранящиеся в базе данных. Как я могу изменить его, чтобы отфильтровать его до выбранного года в year_id, поскольку все, что я пытаюсь сделать, приводит к сбою моего приложения? Я потратил часы на поиск руководств и подобных вопросов, но все еще теряюсь в отношении ответа ……. был бы очень признателен за помощь
MyDBHelper mh = new MyDBHelper(this);
mDb = mh.getWritableDatabase();
mCursor = mDb.query("tracker", null, null, null, null, null,
"category_name ASC");
startManagingCursor(mCursor);
int view[] = {R.id.categoryNameView, R.id.dataView, R.id.placeView, R.id.amountView};
String col[] = { "category_name", "date", "place", "amount"};
SimpleCursorAdapter ca = new SimpleCursorAdapter(
this, R.layout.display_item, mCursor, col, view);
DisplayAllView = (ListView) findViewById(R.id.DisplayDateListView);
DisplayAllView.setAdapter(ca);
Комментарии:
1. Как мы должны помочь с вашим SQL запросом, если вы его не публикуете?
2. @maple Он действительно опубликовал запрос — это метод в классе базы данных.
Ответ №1:
Взгляните на javadoc для db.query
3d и 4-й аргументы являются
выберите фильтр, указывающий, какие строки возвращать, отформатированный как предложение SQL WHERE (исключая само WHERE). Передача null вернет все строки для данной таблицы. selectionArgs Вы можете включить ?s в selection, которые будут заменены значениями из selectionArgs, чтобы они отображались в выделении. Значения будут привязаны в виде строк.
Итак, вы бы сделали что-то вроде
mCursor = mDb.query("tracker", null,
"year_id = ?", new String[] { String.valueOf(year)},
null, null, "category_name ASC");
Комментарии:
1. Приветствую Хейко за ваш ответ, высоко ценится. Я уже просмотрел db.query и попробовал что-то похожее на ваш запрос, который привел к сбою этого действия. Еще раз, когда я заменил ваш sql в коде, действие приводит к сбою приложения. В журнале написано «450: ОШИБКА / База данных (412): android.database.sqlite. DatabaseObjectNotClosedException: Приложение не закрыло курсор или объект базы данных, который был открыт здесь » Единственным другим кодом в activity является защищенный void onDestroy { super.onDestroy(); mDb.close();} Есть идеи относительно того, что я делаю неправильно и почему возникает эта ошибка?
2. Только что заметил максимальное предложение «year_id =?», которое сделало свое дело! Огромное спасибо, ребята ……Аарон
3. @Aaron Я только что обновил свой ответ, включив =? для других, чтобы это был правильный пример. Извините, что не совсем правильно понял. Но вы с этим разобрались 🙂