XSJS从SQL查询中获取{key:value}配对结果

时间:2018-01-17 08:19:00

标签: javascript sap hana

我使用SAP HANA Studio创建一个基本上可以执行以下操作的API:

  1. 获取请求 - 带参数
  2. 执行SQL查询(动态生成SQL查询)
  3. 以{key:value}对格式回复结果。
  4. 我试过:

    var output = {results: []};
    var record = {};
    try {
        var query = 'SELECT REGION_ID, REGION FROM \"SOME_TABLE\"';
        var conn = $.db.getConnection();
        var pstmt = conn.prepareStatement(query);
    
        //################### DOUBT ################### 
        var rs = pstmt.executeQuery();
        while (rs.next()) {
              record.Key1 = rs.getString(1);
              record.Key2 = rs.getString(2);
              output.results.push(record);
        }
        //#############################################
    
        rs.close();
        pstmt.close();
        conn.close();
    }
    
    catch (e) {
        $.response.status = $.net.http.INTERNAL_SERVER_ERROR;
        $.response.setBody(e.message);
    }
    
    var body = JSON.stringify(rs);
    $.response.contentType = "text/html";
    $.response.status = $.net.http.OK;
    $.response.setBody(body);
    

    以上代码

    DOUBT 部分,我正在通过 rs 进行迭代,并为手动创建的密钥 key1, key2, key-n 分配值。 <我不想要这个>

    我想要

    变量 rs 应该像一个带键值对的JSON,所以我可以通过一种方式迭代它,我不必手动创建索引,而应该来自的 DB。

    请帮忙。

1 个答案:

答案 0 :(得分:1)

下面的代码会将结果显示为{}的[],其中{}表示结果集中的一行。 {}键是列名,值是实际字段值。 您仍然需要迭代,但您不需要对密钥进行硬编码。 使用getMetaData和相应的class

function select(sql) {
    var i, object;
    var array = [];
    var label;
    try {
        var runsSQL = $.db.getConnection().prepareStatement(sql);
        var dbReturn = runsSQL.executeQuery();
        var metaData = dbReturn.getMetaData();
        var columnCount = metaData.getColumnCount() + 1;
        while (dbReturn.next()) {
            object = {};
            for (i = 1; i < columnCount; i++) {
                label = metaData.getColumnLabel(i);
                object[label] = dbReturn.getNString(i);
            }
            array.push(object);
        }
        dbReturn.close();
        runsSQL.close();
    } catch (e) {
        return ["error",e];
    }
    return array;
}
$.response.contentType = "application/json; charset=UTF-8";     
$.response.setBody(JSON.stringify(select("SELECT TOP 10 * FROM M_TABLES")));
$.response.status = status;