【问题标题】:Cannot insert certain characters Hana Database无法插入某些字符 Hana 数据库
【发布时间】:2017-02-22 18:57:16
【问题描述】:

我正在 SAP HANA Studio 中制作 Hana 应用程序。当它们是“1”和“apple”之类的正常事物时,我可以将条目插入到我制作的 hdbtable 中。当我出于某种原因尝试添加诸如“+”或“%”之类的值时,它们在我的数据预览中显示为一个空格。怎么不保存?我该如何解决这个问题,以便我可以添加这些字符?更改 NVARCHAR 和 VARCHAR 不起作用。

下面是我的表的架构。

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

                    });
                });

【问题讨论】:

  • 如何将要插入的参数移交给脚本?通过 URL 参数?在这种情况下,请确保对 URL 特殊的字符进行转义,例如 %、?、+、: 。
  • 我添加了控制器的部分,用于交接参数。我到底应该在哪里做检查?当我在控制器中引入 % 作为 desc 参数时,我认为它可以交出它,因为我看到 Insert.xsjs?id=17&desc=% 已被检索(尽管它返回 400 错误)。我签入了 XSJS desc==="%25",如果是这样,我只更改为“%”,但我认为它无法修复它。
  • 我认为你是对的,但我想我的问题是 URL 在哪里进行编码?我正在做的一个解决方法是将控制器中的 desc 更改为一些定义的字符,例如“perc”,然后检查它是否是 XSJS 文件中的这个值。这是解决此问题的最佳方法吗?

标签: sql database sap hana


【解决方案1】:

您的控制器的截图显示您正在传递 id 和 desc 而不在 URL 中进行编码。这不适用于在 URL 中具有特殊含义的字符,例如 + 和 %。您可以在RFC 3986 中找到有关 URL 编码和保留字符的详细信息。

在构造 URL 时使用 JavaScript 的 encodeURIComponent 对单个数据进行编码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2017-12-07
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多