Я бы предложил следующее: -
public String getContactNumber(String email){
String contact = "NO CONTACT FOUND"; //<<<<<<<<<< Default in case no row is found.
SQLiteDatabase db = this.getWritableDatabase(); //<<<<<<<<<< Generally getReadable gets a writable database
String[] columns_to_get = new String[]{COLUMN_USER_MOBILE_NUMBER};
String whereclause = COLUMN_USER_EMAIL + "=?";
String[] whereargs = new String[]{email};
Cursor cursor = db.query(TABLE_USER,columns_to_get,whereclause,whereargs,null,null,null);
//What to put here to extract the data.
if (cursor.moveToFirst()) {
contact = csr.getString(csr.getColumnIndex(COLUMN_USER_MOBILE_NUMBER));
}
cursor.close();
return contact;
}
- Вышеприведенное предполагает, что в письме будет только 1 строка (что наиболее вероятно).
Пояснения
Установлено значение по умолчанию, чтобы вы могли легко определить, передано ли недействительное / несуществующее электронное письмо (вы можете проверить возвращаемое значение, если это необходимо (может быть проще иметь "")и проверьте длину как проверку)).
getReadableDatabase был заменен на getWritableDatabase , так как если нет проблем с базой данных, база данных с возможностью записи будет возвращена, какper: -
Создание и / или открытие базы данных.Это будет тот же объект, возвращаемый функцией getWritableDatabase (), если для какой-либо проблемы, например, для полного диска, база данных должна быть открыта только для чтения.В этом случае будет доступен объект базы данных только для чтения.Если проблема устранена, будущий вызов getWritableDatabase () может завершиться успешно, и в этом случае объект базы данных только для чтения будет закрыт, а объект чтения / записи будет возвращен в будущем. getReadableDatabase
- Обратите внимание, что никаких реальных проблем в любом случае нет;
Рекомендуемый запрос метод был использован вместометод rawQuery .Это имеет явные преимущества: он строит базовый SQL, а также предлагает защиту от внедрения SQL (на тот случай, если передаваемое сообщение введено пользователем).
- эта версия метода принимает 7 параметров: -
- Имя таблицы в виде строки
- Столбцы, которые будут извлечены в виде массива Strings (он же String array). null может быть всеми столбцами.
- Предложение where меньше ключевого слова WHERE с символом? Для представления аргументов (см. Далее). null если нет предложения WHERE.
- Аргументы, которые должны быть применены (замените? 1 на 1) как массив строк. null если предложение WHERE отсутствует или отсутствует.
- Предложение GROUP BY, за исключением ключевых слов GROUP BY. null если нет предложения GROUP BY.
- Предложение HAVING, за исключением ключевого слова HAVING. null если нет предложения HAVING.
- Предложение ORDER BY, за исключением ключевых слов ORDER BY. null если нет предложения ORDER BY.
SQLiteDatabase - query - Обратите внимание, что есть 4 метода запроса (см. Ссылку, чтобы увидеть небольшую разницу, я считаю, что это наиболее часто используемый)
Извлечение данных - это новый код.Когда курсор возвращается, он находится в позиции ДО ПЕРВОЙ СТРОКИ, поэтому вам нужно перейти к правильной строке.Таким образом, метод moveToFirst * подходит (обратите внимание, что если перемещение не может быть выполнено методом перемещения, он вернет false, следовательно, как вы можете сказать if (cursor.moveToFirst())
) .Затем данные извлекаются из соответствующего столбца с использованием метода ** getString , который принимает int в качестве аргумента для смещения столбца (в данном случае 0).Однако использование жестко закодированных значений может привести к проблемам, поэтому метод getColumnIndex используется для получения смещения в соответствии с именем столбца (-1 возвращается, если указанный столбец отсутствует в курсоре).