У вас есть ряд проблем.
Попытка использовать String data = cursor.getString(cursor.getColumnIndex("First_Name"));
приведет к ошибке, поскольку вы не переместили курсор за пределы ПЕРЕД ПЕРВОЙ СТРОКОЙ и попытка доступа к строке -1 приведет к исключению (вероятная проблема, с которой вы столкнулись).
- вы можете использовать различныепереехать???методы, например, moveToFirst, moveToNext (2 наиболее распространенных), moveToLast, moveToPosition.
- Большинство движений курсора ???методы возвращают true, если перемещение можно сделать, иначе false.
Вы НЕ МОЖЕТЕ закрыть базу данных, а затем получить доступ к Курсору (это произошло бы, если бы проблема, о которой говорилось выше, быларешено)
Курсор буферизует строки, а затем ТОЛЬКО при необходимости.
То есть Курсор, когда возвращается из метода запроса (или rawQuery) в позиции ДО ПЕРВОЙ СТРОКИ (-1), это только когдасделана попытка переместиться через Курсор, заполненный CursorWindow (буфер) (включая getCount ()) и полученные данные.Поэтому база данных ДОЛЖНА быть открыта.
Если вы хотите одну строку, полное имя, тогда вы можете использовать : -
String studentData(String userId) { //<<<<<<<<<< returns the string rather than the Cursor
SQLiteDatabase db = getWritableDatabase();
String rv = "NO NAME FOUND"; //<<<<<<<<<< value returned if no row is located
Cursor cursor = db.query(studentTable, new String[] { "First_Name", "Middle_Name", "Last_Name"}, "User_ID=?", new String[] { userId }, null, null, null, null);
if (cursor.modeToFirst()) {
String rv =
cursor.getString(cursor.getColumnIndex("First_Name")) +
" " +
cursor.getString(cursor.getColumnIndex("Middle_Name")) +
" " +
cursor.getString(cursor.getColumnIndex("Last_Name"));
}
cursor.close(); //<<<<<<<<<< should close all cursors when done with them
db.close(); //<<<<<<<<<< not required but would result in an exception if returning a Cursor
return rv;
}
Или поочередно: -
String studentData(String userId) { //<<<<<<<<<< returns the string rather than the Cursor
SQLiteDatabase db = getWritableDatabase();
String rv = "NO NAME FOUND"; //<<<<<<<<<< value returned if no row is located
Cursor cursor = db.query(studentTable, new String[] { "First_Name"||" "||"Middle_Name"||" "||"Last_Name" AS fullname}, "User_ID=?", new String[] { userId }, null, null, null, null);
if (cursor.modeToFirst()) {
String rv =
cursor.getString(cursor.getColumnIndex("fullname"));
}
cursor.close(); //<<<<<<<<<< should close all cursors when done with them
db.close(); //<<<<<<<<<< not required but would result in an exception if returning a Cursor
return rv;
}
- базовый запрос
SELECT First_Name||" "||Middle_Name||" "||LastName AS fullname FROM student_table;
, поэтому вы объединяете имена как часть запроса, который возвращает только одиндинамически создаваемый столбец с именем полное имя .