Не удалось получить данные столбца из базы данных

У меня есть таблица с ключевыми словами в базе данных. Я хочу получить данные столбцов сигналов тревоги и местоположения из этой таблицы и не могу их получить, кроме контактного номера. Сейчас я показываю их значения в тосте, но каждый раз, когда я запускаю любой запрос чтобы показать мой будильник или местоположение в Toast, он пуст. Но всегда отображается мой контактный номер. Не понимаю причину этой проблемы. Я также проверил представление своих таблиц, и в них отображаются значения будильника, местоположения.

Create Table keywords( contact_number text primary key  , alarm text  , location text )

и моя функция вставки

  public boolean insertkeys (String alarm ,String location ,String contact){

        SQLiteDatabase db = this.getWritableDatabase();
        //ContentValues is a name value pair, used to insert or update values into database tables.
        // ContentValues object will be passed to SQLiteDataBase objects insert() and update() functions.
        //  ContentValues contentValues = new ContentValues();
        ContentValues contentValues = new ContentValues();


        contentValues.put("alarm",alarm);
        contentValues.put("location",location);
        contentValues.put("contact_number",contact);
        long ins = db.insert("keywords",null,contentValues);
        long upd = db.update("keywords",contentValues,"contact_number = ?",new String[]{contact});
        //  db.close();
        if (ins == -1 && upd == -1)
            return  false;
        else
            return true;
    }

Я вставляю и обновляю свои данные каждый раз, когда нажимается моя кнопка сохранения. Может ли кто-нибудь здесь сказать, как я могу написать запрос для извлечения данных из этих полей и установить для него Toast или Edit text. Я новичок в базе данных и застрял здесь примерно на неделю. Заранее спасибо за помощь :)

1
0
613
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы извлекаете данные с помощью запроса ВЫБРАТЬ, который возвращается в виде курсора при использовании Android SDK.

Курсор похож на таблицу тем, что имеет несколько строк, каждая из которых имеет определенное количество столбцов в зависимости от того, что вы выбираете.

Чтобы получить все строки, запрос SELECT будет выглядеть следующим образом: -

`SELECT * FROM keywords`

Чтобы сделать это с помощью Android SDK, вы можете использовать удобный метод SQLiteDatabaseзапрос, например. для вышеизложенного вы можете использовать: -

Cursor cursor = db.query("keywords",null,null,null,null,null,null);
  • проверьте приведенные выше ссылки на значения/параметры, которые можно передать, и на то, как они соотносятся с оператором SELECT.

Затем вы проходите по возвращенному курсору, извлекая данные, обычно используя методы Курсорпереехать???. Отмечая, что большинство вернет false, если ход не может быть сделан, а также отметив, что исходная позиция в курсоре перед первым рядом

Таким образом, у вас может быть метод, который возвращает курсор согласно: -

public Cursor getAllKeys(){

    SQLiteDatabase db = this.getWritableDatabase();
    return db.query("keywords",null,null,null,null,null,null);
}

Затем вы можете обработать все строки, используя: -

Cursor csr = yourDBHelper.getAllKeys();
while (csr.moveToNext()) {
    String current_contact_number = csr.getString(csr.getColumnIndex("contact_number");
    String current_alarm = csr.getString(csr.getColumnIndex("alarm");
    String current_location = csr.getString(csr.getColumnIndex("location"));
    ...... your code to Toast or use the retrieved values       
}
csr.close(); //<<<<<<<<<< you should always close a Cursor when finished with it.

Дополнительный

Что касается комментария: -

Cursor query which you have suggested I tried to make changes in it like putting column and where clause but after that it returns me nothing when I execute it.Could you tell me that query too.

Следующим может быть способ получить только сигнал тревоги в соответствии с контактным номером.

public String getAlarmByContactNumber(String contactNumber){

    String rv = "";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor csr = db.query(
        "keywords", //<<<<<<<<<<<< the FROM clause (less the FROM keyword) typically the name of the table from which the data is to be extracted (but can include JOINS for example, for more complex queries)
        new String[]{"alarm"}, //<<<<<<<<<< A String[] of the column names to be extracted (null equates to * which means all columns) (note can be more complex and include functions/sub queries)
        "contact_number=?", //<<<<<<<<<< WHERE clause (less the WHERE keyword) note **?** are place holders for parameters passed as 4th argument
        new String[]{contactNumber},
        null, //<<<<<<<<<< GROUP BY clause (less the GROUP BY keywords)
        null, //<<<<<<<<<< HAVING clause (less the HAVING keyword)
        null  //<<<<<<<<<< ORDER BY clause (less the ORDER BY keywords)
    );
    if (csr.moveToFirst()) {
        rv = csr.getString(csr.getColumnIndex("alarm"));
    }
    csr.close();
    return rv;
}
  • Вышеприведенное предполагает, что у вас будет только один будильник на контактный номер.
  • Вышеприведенный код в принципе не запускался и не тестировался, поэтому может содержать незначительные ошибки.

Большое спасибо... Запрос отлично работает, чтобы получить все данные. Но если мне нужно получить конкретный столбец, то через какое-то время вместо moveToNext должно прийти

Azmat Inayat 24.06.2019 23:58

@AzmatInayat перейти к следующему по-прежнему будет работать, как если бы была только 1 строка, а затем после этой строки, поскольку курсор затем переместится после последней строки, вернет false и выйдет из цикла while. Если вы знаете, что получите только одну строку, можно использовать моветоперст, НО ВСЕГДА ПРОВЕРЯЙТЕ возвращаемое значение. См. ссылки в ответе для других методов Cursor (например, moveToPosition, moveToPrevious, getInt(), getLong() и т. д. ...........)

MikeT 25.06.2019 00:16

Я пытаюсь получить тревогу, местоположение и номер контакта отдельно (например, «Выбрать тревогу из ключевых слов, где контакт_номер =?»), например, отдельный запрос для каждого из них. Запрос курсора, который вы предложили, я пытался внести в него изменения, например, поместить столбец и где пункт, но после этого он мне ничего не возвращает, когда я его выполняю. Не могли бы вы сказать мне и этот запрос. Еще раз спасибо за вашу помощь :)

Azmat Inayat 25.06.2019 11:47

@AzmatInayat Я отредактировал ответ с примером метода получения сигнала тревоги на основе контактного номера.

MikeT 26.06.2019 22:11

Другие вопросы по теме