2017-02-22 32 views
0

Я делаю приложение Hana в SAP HANA Studio. Я могу вставлять записи в hdbtable, которые я сделал, когда они нормальные вещи, такие как «1» и «яблоко». Когда я пытаюсь добавить значения, такие как «+» или «%» по какой-то причине, они отображаются как пробел в моем предварительном просмотре данных. Почему они не хранятся? Как я могу исправить это, чтобы добавить эти символы? Изменение NVARCHAR и VARCHAR не работает.Невозможно вставить определенные символы База данных Hana

Ниже приведена моя схема для моего стола.

table.schemaName = "scheming"; 
table.tableType = COLUMNSTORE; 
table.description = "test table"; 
table.columns = [ 
    {name = "id"; sqlType = NVARCHAR; nullable = false; length = 10; comment = "id"; }, 
    {name = "desc"; sqlType = VARCHAR; nullable = false; length = 10; comment = "desc";} 
]; 

table.primaryKey.pkcolumns = ["id"]; 

и вот мой xsjs файл:

$.response.contentType = "text/html"; 

var id = $.request.parameters.get('id'); 
var desc = $.request.parameters.get('desc'); 

$.trace.debug("Here is my log."); 

try { 
    var conn = $.db.getConnection(); 

    var st = conn.prepareStatement("INSERT INTO \"scheming\".\"blah.blah::test_table\" values(?,?)"); 

    st.setString(1, id); 
    st.setString(2, desc); 

    st.execute(); 

    st.close(); 
    conn.commit(); 
    conn.close(); 

    $.response.setBody('X'); 

} catch (err) { 
    $.response.setBody(err); 
    // $.response.status = $.net.http.INTERNAL_SERVER_ERROR 
} 

контроллер файл

jQuery(document).ready(
       function() { 
        jQuery.get("/com/colpal/training/test1/Insert.xsjs?id=" + id +"&desc=" + desc, 
          function(result) { 

         if (result == 'X'){ 
          console.log("Inserted"); 
         }else if(result == 'Y'){ 
          console.log("Fail"); 
         } 

        }); 
       }); 
+0

Как вы хэндовера параметры, которые вы хотите вставить в сценарий? Через параметры URL? В этом случае обязательно избегайте символов, которые являются особыми для URL-адресов, таких как%,?, +,:. –

+0

Я добавил часть контроллера, где передаю параметры. Где именно я должен делать чек? Когда я ввожу параметр% в качестве параметра desc в контроллере, я думаю, что он справится с этим, потому что я вижу, что извлекается 'Insert.xsjs? Id = 17 & desc =%' (хотя он возвращает ошибку 400). Я проверил в XSJS 'desc ==="% 25 "', и если так, то я перехожу только к «%», но я не думаю, что он его исправляет. – SAPUI5GUY

+0

Я думаю, что вы правы, но я думаю, мой вопрос в том, где URL-адрес кодирования? Обходной путь, который я делаю, - это изменить desc в контроллере на некоторые определенные символы, такие как «perc», а затем проверить, является ли это значение в файле XSJS. Это лучший способ решить эту проблему? – SAPUI5GUY

ответ

0

отрезал ваш контроллер показывает, что вы передаете над Ид и по алфавиту без кодирования в URL. Это не работает для символов, которые имеют особое значение в URL-адресе, таком как + и%. Вы можете найти информацию о кодировке URL и зарезервированных символах в RFC 3986.

Использование JavaScript-х encodeURIComponent для кодирования индивидуальных данных при построении URL:

jQuery.get("/com/colpal/training/test1/Insert.xsjs?id=" + 
    encodeURIComponent(id) + "&desc=" + encodeURIComponent(desc), ...