2015-08-11 8 views
0

Я пытаюсь получить все данные из таблицы БД в объект JSON, например, так:Как вернуть более одной строки из базы данных HANA с помощью XS?

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); 
} 
} 

Запрос работает только частично, так как в данном я получаю количество строк х последние содержательные строк, например, так:

[{"team":"I313766","fname":"0","lname":"LEGOWSKI"}, 
{"team":"I313766","fname":"0","lname":"LEGOWSKI"}, 
    etc. etc.] 

Как бы я мог получить все данные вместо одной строки?

ответ

2

Хорошо, я получил решение. Перемещение одной строки, объявляющей массив vals в оператор while, решило проблему - массив vals инициализировался как пустой массив каждый раз, поэтому позволял правильный .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

Это XSJS (серверная сторона JS), а не SAPUI5. Чтение БД довольно похоже на структуру JDBC в Java для чтения таблиц DB, и коллекция набора результатов будет иметь данные, и вы перебираете их и переносите их на локальный объект. Существует только вызов БД во время execute_query, а rs.next() - это всего лишь цикл для чтения каждой строки.

+0

Спасибо, мой плохой при указании вопроса. Это похоже, но поскольку в javascript нет предопределенного класса для RowSet (насколько я знаю - в java есть библиотека, которую я использовал при написании кода в java), это действительно не работало изначально, хотя принцип аналогичен, как ты сказал. – pokrak94