Вы можете использовать JOIN , (я полагаю из предыдущих вопросов, что SID есть в обеих таблицах, так что это то, что вы использовали бы в качестве основы для JOIN ).
Таким образом, вы могли бы использовать что-то вроде SELECT * FROM userinfo JOIN userreg ON userinfo.sid = userreg.sid
- Обратите внимание, что простое использование имени столбца sid будет неоднозначным, и, следовательно, необходимость префикса столбца с именем таблицы.В существующем состоянии вам нужно будет указать столбцы в результате (это не должно вызывать проблем, поскольку они оба будут иметь одинаковое значение, но не указание псевдонима с использованием AS cab будет проблематичным для столбцов с одинаковым именем).
Чтобы использовать удобный метод query , JOIN должен быть частью 1-го (табличного) параметра.
Таким образом, вышеприведенное будет закодировано как: -
public String getUserNameFromSID(String sid) {
String rv = "";
String joinclause = " JOIN " + TABLE_USERREG + " ON " + TABLE_USERINFO + "." + KEY_SID + " = " + TABLE_USERREG + "." + KEY_SID; //<<<<<<<<<< ADDED
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getReadableDatabase();
Cursor csr = db.query(TABLE_USERINFO + joinclause,null,whereclause,whereargs,null,null,null); //<<<<<<<<<< CHANGED
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(KEY_NAME));
}
csr.close();
return rv;
}
- Примечание Вышеприведенный код является принципиальным кодом, так как
- имена переменных и идентификаторы могут не отражать фактический код и, следовательно, могут нуждаться в изменении.
- код не был запущен или протестирован и поэтому может содержать некоторые незначительные ошибки.
- Вышеприведенное возвращает только имя пользователя, вы не можете вернуть несколько различных значений, поэтому вам необходимо вернуть объект, например Пользовательский объект для охвата нескольких значений.Вы получите значения для установки объекта аналогично тому, как rv установлено выше.
Дополнительный комментарий: -
Дело в том, что мне нужно передать параметр Sid функции, которую я могу сделать только на странице регистрации / входа.Как тогда я могу передать это значение на страницу навигации?
Вместо страниц термин, используемый для Android, называется «Действия».Вы можете передавать данные из одного действия в другое вызванное / запущенное / вызванное действие, используя дополнительные функции Intent после создания Intent при подготовке к вызову.То есть, если действие должно вызываться напрямую из родительского действия (регистрационное действие в вашем случае).
Если, например, регистрационное действие было вызвано из исходного действия и возвращается из этого действия, то вы все еще используетеНамерение вернуть значения, но процесс регистрации должен быть вызван / запущен / вызван с использованием startActivityForResult.Действие, начинающее действие регистрации, должно переопределить метод onActivityResult.Активность регистрации устанавливает дополнительные намерения и использует setResult для указания кода результата, а затем намерения его вернуть.
Существует множество примеров переполнения стека, например, Отправка данных обратно в Основное действие в Android