2017-02-22 11 views
0

Ich mache eine Hana-Anwendung in SAP HANA Studio. Ich bin in der Lage, Einträge in eine hdbtable einzufügen, die ich gemacht habe, wenn sie normale Dinge wie "1" und "Apfel" sind. Wenn ich aus irgendeinem Grund versuche, Werte wie "+" oder "%" hinzuzufügen, werden sie in der Datenvorschau als Leerzeichen angezeigt. Wie kommt es, dass sie nicht gespeichert werden? Wie kann ich das beheben, damit ich diese Zeichen hinzufügen kann? Das Ändern von NVARCHAR und VARCHAR funktioniert nicht.Kann bestimmte Zeichen nicht einfügen Hana-Datenbank

Unten ist mein Schema für meine Tabelle.

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"]; 

und hier ist meine xsjs Datei:

$.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 
} 

Controller Datei

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

Wie Übergabe Sie die Parameter, die Sie Ihr Skript eingefügt werden soll? Über URL-Parameter? Achten Sie in diesem Fall darauf, Zeichen zu entschlüsseln, die speziell für URLs sind, z. B.%,?, +,:. –

+0

Ich habe den Teil des Controllers hinzugefügt, wo ich die Parameter übergebe. Wo genau sollte ich den Check machen? Wenn ich% als denc-Parameter in den Controller einfüge, denke ich, dass es OK ist, weil ich sehe, dass 'Insert.xsjs? Id = 17 & desc =%' abgerufen wird (obwohl es einen Fehler von 400 gibt). Ich habe in der XSJS 'desc ==="% 25 "' eingecheckt und wenn ja, ändere ich nur zu einem "%", aber ich denke nicht, dass es es behebt. – SAPUI5GUY

+0

Ich denke, du hast recht, aber ich denke, meine Frage ist, wo die URL die Codierung tut? Eine Problemumgehung, die ich tue, ist das Ändern der Beschreibung im Controller in einige definierte Zeichen wie "perc" und dann prüfen, ob es dieser Wert in der XSJS-Datei ist. Ist das der beste Weg, um dieses Problem zu beheben? – SAPUI5GUY

Antwort

0

Die snipped des Controllers zeigt, dass Sie über ID und ab, ohne Kodierung in der URL sind vorbei. Das funktioniert nicht für Zeichen, die in der URL eine besondere Bedeutung haben wie + und%. Informationen zur URL-Codierung und reservierten Zeichen finden Sie unter RFC 3986.

Verwendung von JavaScript encodeURIComponent die einzelnen Daten codieren, wenn die URL der Konstruktion:

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