ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

java-MySQL JDBC驱动程序中的客户端仿真准备语句

2019-11-22 01:16:31  阅读:220  来源: 互联网

标签:jdbc prepared-statement java mysql connector-j


我试图了解MySQL JDBC驱动程序中的客户端仿真准备语句如何工作.

第1部分
我在线阅读了有关准备好的语句的信息,当关系数据库处理JDBC / SQL查询时涉及四个步骤,它们分别如下:

>解析传入的SQL查询
>编译SQL查询
>计划/优化数据采集路径
>执行优化的查询/获取并返回数据

步骤的预执行将编译SQL语句,因此提供了预优化.
对于服务器端准备好的语句,将对数据库进行一次额外的往返操作以预编译SQL语句.


如果客户端仿真准备好的语句没有往返数据库,该如何执行步骤3?还是客户端仿真准备好的语句工作不同?

第2部分
我也做了两个实验.

>实验1-对每个客户端使用一个客户端准备好的语句
询问
>实验2-为“重新使用”客户端准备好的语句
多次相同的查询

这两个实验都显示出性能的改善,例如响应时间.实验1的改进约18%,实验2的改进约30%.

>我是否可以假设仍存在针对
客户端准备好的语句?
>如果是,是否以类似于服务器端的方式进行预优化
(第1部分中提到的四个步骤)准备好的语句或
有很多不同的方式吗?
>如果没有,为什么还有改进?

谢谢你的帮助!

解决方法:

简单答案:否. MySQL驱动程序(默认情况下)将仅执行从参数化查询和(转义的)参数值创建的查询字符串.它将通过用转义的值替换参数占位符在本地创建此查询,然后将其发送到服务器

请注意,JDBC不需要在服务器端实际准备PreparedStatement,也不需要“提高”性能. JDBC仅要求它们可以工作;如:您可以使用?指定查询作为参数占位符,驱动程序将使用通过setXXX方法设置的值正确执行语句.

还要注意,MySQL确实具有服务器端准备好的语句,但是您需要使用连接属性useServerPrepStmts并将其值为true来显式启用它.

标签:jdbc,prepared-statement,java,mysql,connector-j
来源: https://codeday.me/bug/20191122/2055897.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有