如何使用 XS 从 HANA 数据库中 return 多行?
How to return more than one row from HANA database using XS?
我正在尝试将数据库 table 中的所有数据检索到 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.]
我如何让它检索所有数据而不是检索一行数据?
这是 XSJS(服务器端 JS)而不是 SAPUI5。 DB 的读取与 Java 中的 JDBC 框架非常相似,用于读取 DB 表,结果集集合将包含数据,您遍历它们并将它们移动到本地对象。
在 execute_query 期间只有对数据库的调用,而 rs.next() 只是一个读取每一行的循环。
好的,我得到了解决方案。将声明数组 vals 的单行移动到 while 语句中解决了问题 - 数组 vals 每次都被初始化为一个空数组,因此允许对每一行进行适当的 .push,而不是将最后一行从 db table 推入数据多次。感谢所有花时间尝试回答的人。
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);
}
}
上面的解决方案以防将来有人需要它。
我正在尝试将数据库 table 中的所有数据检索到 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.]
我如何让它检索所有数据而不是检索一行数据?
这是 XSJS(服务器端 JS)而不是 SAPUI5。 DB 的读取与 Java 中的 JDBC 框架非常相似,用于读取 DB 表,结果集集合将包含数据,您遍历它们并将它们移动到本地对象。 在 execute_query 期间只有对数据库的调用,而 rs.next() 只是一个读取每一行的循环。
好的,我得到了解决方案。将声明数组 vals 的单行移动到 while 语句中解决了问题 - 数组 vals 每次都被初始化为一个空数组,因此允许对每一行进行适当的 .push,而不是将最后一行从 db table 推入数据多次。感谢所有花时间尝试回答的人。
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);
}
}
上面的解决方案以防将来有人需要它。