Этот запрос:
SELECT * FROM matches LEFT JOIN questions ON matches.id = questions.id_match
выберет 5 столбцов и 2 из них имеют одинаковые имена: id
.
Я считаю, что лучше изменить запрос следующим образом:
SELECT m.id mid, m.description, q.id qid, q.id_match, q.question
FROM matches m LEFT JOIN questions q ON m.id = q.id_match
Так что имена столбцов разные.
Теперь после того, как вы выполните:
Cursor cursor = db.rawQuery(query, null);
у вас есть объект Cursor
, содержащий все строки, извлеченные вышеупомянутым запросом.
Вам нужен цикл для доступа к значениям каждого столбца каждой строки:
while (cursor.moveToNext()) {
String mid = cursor.getString(cursor.getColumnIndex("mid"));
String description = cursor.getString(cursor.getColumnIndex("description"));
String qid = cursor.getString(cursor.getColumnIndex("qid"));
String id_match = cursor.getString(cursor.getColumnIndex("id_match"));
String question = cursor.getString(cursor.getColumnIndex("question"));
// here write your code
}
Если mid
, qid
и id_match
не строки, а целые числа, замените их на getInt()
вместо [ 1110].
Вам нужно изменить строку
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(n);
на
testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(n));
В XML DOM элементы не имеют никаких ' значение, чтобы говорить о. Узлы элементов содержат текстовые узлы как дочерние, и именно эти узлы содержат нужные значения.
РЕДАКТИРОВАТЬ (в ответ на комментарий Томалака): я не знаю ни одной функции в DBMS_XMLDOM для получения объединенного значения всех дочерние текстовые узлы элемента. Если это то, что вам нужно, то вам вполне может понадобиться что-то вроде следующей функции:
CREATE OR REPLACE FUNCTION f_get_text_content (
p_node DBMS_XMLDOM.DOMNode
) RETURN VARCHAR2
AS
l_children DBMS_XMLDOM.DOMNodeList;
l_child DBMS_XMLDOM.DOMNode;
l_text_content VARCHAR2(32767);
l_length INTEGER;
BEGIN
l_children := DBMS_XMLDOM.GetChildNodes(p_node);
l_length := DBMS_XMLDOM.GetLength(l_children);
FOR i IN 0 .. l_length - 1 LOOP
l_child := DBMS_XMLDOM.Item(l_children, i);
IF DBMS_XMLDOM.GetNodeType(l_child) IN (DBMS_XMLDOM.TEXT_NODE, DBMS_XMLDOM.CDATA_SECTION_NODE) THEN
l_text_content := l_text_content || DBMS_XMLDOM.GetNodeValue(l_child);
END IF;
END LOOP;
RETURN l_text_content;
END f_get_text_content;
/