sharding-jdbc系列之SQL执行(六)

精品源码

在前面我们介绍,通过SQL路由找到具体的执行表,通过SQL改写生成具体的执行SQL, 拿到具体的结果之后,sharding-jdbc下一步是干嘛呢,

下一步当然是SQL执行了。

route

routedStatements.addAll(preparedStatements) :

将preparedStatements 放入集合,后续preparedStatement执行完成之后,会从routedStatements获取结果 , 这行代码比较重要

步骤说明:

1.拿到SQL路由,SQL改写的结果,循环 结果集

2.判断SQL类型

3.获取数据库连接,构建PreparedStatement

4.将PreparedStatement集合放入routedStatements , 方便后续获取执行结果。

4.返回PreparedStatement结果

SQL执行

至于为什么取第一个的结果,下面会详细讲的,这个涉及到同步执行和异步执行的问题

execute

异步执行

总结:

1.第一个任务是当前线程直接同步执行, 从第二个开始,其他任务都交给异步线程来执行

2.restFutures.get()通过Future机制阻塞线程,等待所有线程执行完毕之后,才会获取到结果,也就是说只有所有的任务执行成功之后,才会返回结果

ListenableFuture是guava的一个内部实现,后面会找相关的文章给大家分享一下。

SQL执行完成之后,结果会封装在PreparedStatement对象里面,通过getResultSet()方法,可以获取到执行结果。

最终执行

SQLType

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180803G0NMNM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券