当前位置: 首页 > 知识库问答 >
问题:

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

麹浩瀚
2023-03-14

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

第1部分我在网上读到,对于准备好的语句,关系数据库处理JDBC/SQL查询时涉及四个步骤,它们如下:

  1. 分析传入的SQL查询
  2. 编译SQL查询
  3. 规划/优化数据采集路径
  4. 执行优化的查询/获取并返回数据

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

第二部分我还做了两个实验。

  1. 实验1-为每个查询使用一个客户端准备的语句
  2. 实验2-多次“重用”客户端为同一查询准备的语句
  1. 我假设客户端准备好的语句仍然存在预优化是正确的吗?
  2. 如果是,那么它是以类似于服务器端(第1部分中提到的四个步骤)准备好的语句的方式进行预优化,还是以一种非常不同的方式进行预优化?
  3. 如果没有,为什么仍有改进?

谢谢你的帮助!

共有1个答案

罗浩然
2023-03-14

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

注意,JDBC并不要求PreparedStatement实际上是服务器端准备的,也不要求它“改进”性能。JDBC只要求它们工作;如:您可以将指定为parameterplaceholders的查询,驱动程序将使用通过setxxx方法设置的值正确执行语句。

还要注意,MySQL确实有服务器端准备好的语句,但您需要使用连接属性useServerPrepstMTSwith valuetrue显式地启用此语句。

 类似资料:
  • 用于cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持PreparedStatements以及QueryBuilder API。使用其中一种比另一种有什么特别的优势吗?缺点? 文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drive

  • 我在使用DataStax php驱动程序1.0.0-rc和Cassandra 2.2.3的Prepared Statements时遇到了一个奇怪的错误。我在这一行遇到了一条异常: 我看到了这个错误: 下面是用于与Cassandra通信的类存根: 如果我将Simple Statemetn与标准select查询一起使用,它会起作用。 有什么建议吗?

  • 无法在仿真程序中启动AVD。 输出: 模拟器:警告:将VM堆大小设置为低于硬件指定的最小值128MB模拟器:警告:将VM堆大小设置为128MB qemu-system-i386.exe:-drive if=none,index=1,id=cache,file=c:\users\haris.android\avd\nexus_5_api_19.avd/cache.img:无法打开磁盘映像c:\use

  • 启动 cat 客户端前的准备工作 创建 /data/appdatas/cat 目录 确保你具有这个目录的读写权限。 创建 /data/applogs/cat 目录 (可选) 这个目录是用于存放运行时日志的,这将会对调试提供很大帮助,同样需要读写权限。 创建 /data/appdatas/cat/client.xml,内容如下 <?xml version="1.0" encoding="utf-8

  • 出身背景 我有一个远程托管服务器,它运行java vm,带有多人实时问答游戏的自定义服务器代码。服务器处理配对、房间、大厅等。我还在同一个空间使用Mongo db,其中包含手机问答游戏的所有问题。 这是我第一次尝试这样的项目,虽然我精通Java,但我的mongo技能充其量只是新手。 客户单例 我的服务器包含mongo客户端的静态单例: 注意: Mongo客户端对我来说是新的,我知道未能正确使用连池

  • 使用带有PostgreSQL JDBC驱动程序的PostgreSQL数据库,我遇到了一个有趣的挑战。似乎最新版本的驱动程序9.2在执行日期/时间匹配时使用客户端时区。 null