ВЫБЕРИТЕ, ГДЕ sql запрашивает вопрос Android

#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 Я только что обновил свой ответ, включив =? для других, чтобы это был правильный пример. Извините, что не совсем правильно понял. Но вы с этим разобрались 🙂