невозможно получить данные столбца из базы данных - PullRequest
1 голос
/ 24 июня 2019

У меня есть таблица с именем ключевых слов в базе данных. Я хочу извлечь данные из столбцов сигналов тревоги и местоположения из этой таблицы и не могу получить их, кроме номера контакта. Сейчас я показываю их значения в тосте, но каждый раз, когда яЗапустите любой запрос, чтобы показать мой сигнал тревоги или местоположение в 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 Ответ

1 голос
/ 24 июня 2019

Вы извлекаете данные с помощью запроса SELECT , который возвращается как курсор при использовании Android SDK.

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

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

`SELECT * FROM keywords`

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

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

Затем вы перемещаетесь по возвращенному курсору, извлекая данные, обычно используя Курсор move ??? . Отмечая, что большинство из них вернет 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.

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

По поводу комментария: -

Запрос курсора, который вы предложили, я пытался внести в него изменения как поставить столбец и предложение where, но после этого он возвращает меня ничего, когда я выполню его. Не могли бы вы также сказать мне этот запрос.

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

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;
}
  • Вышеприведенное предполагает, что вы должны иметь / хотите иметь только один сигнал тревоги на контактный номер.
  • Вышеприведенный код является принципиальным, он не был запущен или протестирован и поэтому может содержать некоторые незначительные ошибки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...