精品源码
在前面我们介绍,通过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
领取专属 10元无门槛券
私享最新 技术干货