Как вернуть более одной строки из базы данных HANA с помощью XS?
Я пытаюсь извлечь все данные из таблицы базы данных в объект json, например так:
function getTableData()
{
var vals = {};
var data = [];
try {
var dbCon = $.db.getConnection();
var query = 'SELECT * FROM SAPPRD.ZUSERDATATAB';
var pstmt = dbCon.prepareStatement(query);
var rs = {};
rs = pstmt.executeQuery();
while (rs.next()) {
vals.team = rs.getString(1);
vals.fname = rs.getString(3);
vals.lname = rs.getString(2);
data.push(vals);
$.response.status = $.net.http.OK;
}
$.response.setBody(JSON.stringify(data));
// $.response.contentType = contentType;
// $.response.headers.set('Content-Disposition', 'filename=' + filename);
} catch (e) {
$.response.setBody('errors: ' + e.message);
}
}
Запрос работает только частично, потому что в данных я получаю количество строк x содержимое последней строки, например:
[{"team":"I313766","fname":"0","lname":"LEGOWSKI"},
{"team":"I313766","fname":"0","lname":"LEGOWSKI"},
etc. etc.]
Как мне заставить его получать все данные вместо одного ряда раз?
2 ответа
Хорошо, я получил решение. Перемещение одной строки, объявляющей значения массива в оператор while, решило проблему - значения массива каждый раз инициализировались как пустой массив, что позволяло получать правильный.push каждой строки вместо того, чтобы вставлять последнюю строку из таблицы db в данные несколько раз. Спасибо всем, кто нашел время и попытался ответить.
function getTableData()
{
var data = [];
try {
var dbCon = $.db.getConnection();
var query = 'SELECT * FROM SAPPRD.ZUSERDATATAB';
var pstmt = dbCon.prepareStatement(query);
var rs = pstmt.executeQuery();
while (rs.next()) {
var vals = {}; // this is the moved line of code...
vals.team = rs.getString(1);
vals.fname = rs.getString(3);
vals.lname = rs.getString(2);
data.push(vals);
$.response.status = $.net.http.OK;
}
$.response.setBody(JSON.stringify(data));
// $.response.contentType = contentType;
// $.response.headers.set('Content-Disposition', 'filename=' + filename);
} catch (e) {
$.response.setBody('errors: ' + e.message);
}
}
Решение выше на случай, если кому-то понадобится это в будущем.
Это XSJS(JS на стороне сервера), а не SAPUI5. Чтение БД очень похоже на JDBC-инфраструктуру в Java для чтения таблиц БД, и в наборе результирующих наборов будут данные, и вы перебираете их и перемещаете в локальный объект. Во время execute_query есть только вызов БД, а rs.next() - просто цикл для чтения каждой строки.