首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql8 xdevapi node.js CRUD问题

Mysql8 xdevapi node.js CRUD问题
EN

Stack Overflow用户
提问于 2019-02-16 19:20:10
回答 2查看 317关注 0票数 1

让我们看看这个选择:

代码语言:javascript
复制
getSession(<connectionOptions>)
.then(s => { return s.getSchema('<schema>') } )
.then(s => { return s.getTable('<table>') } )
.then(t => t.select('*') // or .select('COUNT(*)')
.where('<where>')
.execute(row => myHandler(row, <other params>)));
//
function myHandler(row, <other params>) {
...
}

我有三个问题,在阅读https://dev.mysql.com/doc/x-devapi-userguide/en和在互联网上搜索之后,我没有发现任何发现:

  1. 如何查看和处理select有一个空的结果集?在node.js xdevapi实现中,我没有得到结果集,只有一个接一个的结果行,所以我想我的回调甚至一次都没有调用。
  2. 因为我的回调被多次调用,所以我不知道最后一次调用它是什么时候,也就是什么时候从结果集中得到最后一行。我怎么看和处理它呢?
  3. 在select字符串中,COUNT(*) /*不被接受,这两种情况都会对*字符抛出一个意外的令牌错误。不过,这是标准SQL。我可以看到我可以使用session.sql(从表中选择计数(*)),但是我很想知道为什么不使用CRUD呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 21:02:32

  1. 你在做的是承诺,而不是回调。因此,在then之后添加execute将让您知道执行已经完成。
  2. 一个选项是:在处理程序函数中,您可以根据需要推送到外部数组或简单计数器,当调用then时,您可以引用计数器来获得结果。第二个选项-基于,它看起来像是在execute将所有结果解析为数组之后的最后一个then。因此,如果只需要在得到所有结果之后才进行操作,则不要在处理程序函数中添加任何内容,只需添加then并在那里执行所需的操作。
  3. 看起来您需要使用它作为函数,比如.then(t => t.count('*').then(t => t.select('*').count()

我从没用过xdevapi,看上去很棒。如果您只将它用于关系操作,我建议您查看一下肯奈

票数 0
EN

Stack Overflow用户

发布于 2019-02-16 22:31:20

为记录:

在.execute之后,您可以添加一个.then,您可以通过函数(受影响的行、生成的ID、警告等)访问一些有用的信息。当然,您可以捕捉到执行的结束:

.execute() .then(info => myInfoHandler(info,<other params>) ... if (info.getAffectedRowsCount()==0) { //empty result set }

这样您就不需要计数(*)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54726781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档