HANA XSJS - 内部错误: dberror(Connection.prepareStatement): 608



我有一个xsjs服务,它用另一个表中的数据填充一些表。 运行一段时间后,服务会给出以下错误: 内部错误:dberror(Connection.prepareStatement(:608 - 超过预准备语句的最大数量:每个连接的预准备语句数不能超过最大语句数

我在开头打开一个 $.db.getConnection((,最后才关闭,在 for 循环上有一个 prepareStatement 语句。(有几个循环,就像其他桌子的波纹管一样(

var aSQL = "select field from table";
var conn  = $.hdb.getConnection(); var connInsert  = $.db.getConnection();
var rsLevel1 = conn.executeQuery(aSQL);
var s = {};
var loc_descr_group = [];
var row = {};
for (i = 0; i < rsLevel1.length; i++) {
var entry = rsLevel1[i].field;
var split = entry.split(",");
for (var j = 0; j<split.length; j++){
if (loc_descr_group.indexOf(split[j]) == -1){
loc_descr_group.push(split[j]);
var value = split[j].replace(/'/g,"''");
sSQL = "insert into another_table "
+ " values ('"+value+"')";
pstmt = connInsert.prepareStatement(sSQL);
pstmt.execute(); 
connInsert.commit();
}
}
}
connInsert.close();
conn.close();

我找不到有关 xsjs 上使用的最大准备语句数量的任何信息。有吗?

谢谢。

这里的问题不在于预准备语句的每次连接限制,而在于代码不必要地在循环中创建新的预准备语句。

预准备语句的整个思想是重用。当运行多个结构相同且仅在所涵盖的实际值上不同的语句时,使用预准备语句可以解析、检查和优化查询结构一次,并一遍又一遍地重用它。

与其为每个插入创建预准备语句对象,不如在嵌套循环构造之前创建一次。 而不是将引号和逗号分隔的值粘贴到 SQL 字符串中,而是使用绑定变量可以提高插入语句的执行速度和安全性。

此外,每次插入后都有一个COMMIT。如果确实需要这样做,那么使用自动提交连接可能是更好的选择。如果不需要,则COMMIT只应在循环完成后发送一次。 这不仅是性能问题(COMMIT总是同步的 - 您的代码等待它(,而且可能是一半插入的记录的问题。

最后,代码使用两种不同的连接方法$.db.getConnection$.hdb.db.connection来创建两个单独的连接对象。对于给定的上下文,这是不必要的,而且相当混乱。 只需使用较新的$.hdb.db.connection和单个连接就足够了。

相关内容

  • 没有找到相关文章

最新更新