如何使用XS从HANA数据库返回多行?

时间:2015-08-11 10:41:43

标签: javascript hana hana-xs

我试图将db表中的所有数据检索到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 个答案:

答案 0 :(得分:2)

好的,我得到了解决方案。将单个行声明数组值转换为while语句解决了问题 - 每次都将数组val初始化为空数组,因此允许每行的正确.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);
    }
}

上面的解决方案,万一以后有人需要它。

答案 1 :(得分:1)

这是XSJS(服务器端JS)而不是SAPUI5。读取DB非常类似于Java中的JDBC框架来读取DB表,结果集集合将具有数据,您可以迭代它们并将它们移动到本地对象。 在execute_query期间只调用DB,而rs.next()只是一个读取每一行的循环。