我使用SAP HANA Studio创建一个基本上可以执行以下操作的API:
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。
请帮忙。
答案 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;