gpt4 book ai didi

SqlAnywhere 的 Node.js 驱动程序 - 超出准备语句

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:03 26 4
gpt4 key购买 nike

我正在使用node.js driver对于 SqlAnywhere。

我收到“超出‘准备语句’的资源调控器”错误。

最初,我是这样执行查询的:

connection.exec(myQuery, myArgs, myCallback);

其中 myQuery 看起来像这样:

"SELECT * FROM some_procedure(?, ?, ?);"

然后我将其更改为:

connection.exec(myQuery, myCallback);

myQuery 现在看起来像这样:

"SELECT * FROM some_procedure(%s);"

然后使用 util.format 格式化查询:

myQuery = util.format(query, args.join(','));

...但我仍然遇到同样的错误。为什么会发生这种情况?

如何防止连接创建一堆准备好的语句?

谢谢!

编辑:我知道连接的准备语句数量限制为 50 个(默认值)。

最佳答案

我认为 sqlanywhere API 中存在错误。我检查了他们的代码,当您将回调传递给查询时,他们似乎没有删除该语句

if( callback_required ) {
Local<Function> callback = Local<Function>::Cast(args[cbfunc_arg]);
baton->callback = Persistent<Function>::New( callback );

int status;
status = uv_queue_work( uv_default_loop(), req, executeWork, (uv_after_work_cb)executeAfter );
assert(status == 0);

return scope.Close( Undefined() );
}

stmt drop 代码仅在该回调 if 后执行

if( baton->sqlany_stmt != NULL ) {
api.sqlany_free_stmt( baton->sqlany_stmt );
}

无论如何,作为解决方法,我建议您为每个查询创建一个语句,然后在执行后删除它。

在他们的 github 中报告这个错误也会很有趣。 .

关于SqlAnywhere 的 Node.js 驱动程序 - 超出准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com