首页 > 其他分享 >preparedStatement

preparedStatement

时间:2024-08-06 16:30:35浏览次数:13  
标签:preparedStatement prepare prepareStatement SQL MySQL 服务器 执行

 

执行过程描述

1.执行connection.prepareStatement方法时判断serverPrepStmts为true,于是构造一个prepare的数据包(数据包中有sql),发送给MySQL服务器,服务器返回一个statementId。
2.执行executeUpdate方法时,会将statementId和参数值传给MySQL服务器(不再发送sql),由MySQL服务器执行。

 

prepareStatement为false执行过程

1.执行prepareStatement时判断prepareStatement为false,会创建一个ClientPreparedStatement对象,不会向MySQL服务器发送数据包。

2.执行executeUpdate方法时,会对设置的参数进行转义操作,最后直接将拼接好的完整SQL发送给MySQL服务器。

 

客户端和服务端PreparedStatement的执行效率

1.SQL解析时间。SQL发送到MySQL服务器后并不是直接执行的,需要先经过SQL解析、SQL优化等步骤,使用serverPrepStmts时在prepare阶段会将SQL解析,之后多次执行不会再次解析,不使用serverPreptStmts时每次执行SQL服务器都需要解析,在批量执行的时候效率会有一定的影响。

2.网络开销。使用serverPrepStmts,在prepare阶段会多一次与MySQL服务器的交互,但是执行的时候不会传SQL,只会传参数,在批量执行的时候可以减少数据传输量;使用ClientPreparedStatement不会有prepare阶段的交互开销,但是每次执行都是传输完整的SQL,数据量较大。

 

 

参考:https://zhuanlan.zhihu.com/p/661572799

标签:preparedStatement,prepare,prepareStatement,SQL,MySQL,服务器,执行
From: https://www.cnblogs.com/zhangbao3/p/18345419

相关文章

  • Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
    PreparedStatementSQL注入执行预编译的SQL对象这样也能登录成功模拟SQL注入是这个原因现在基本上不存在SQL注入的问题解决SQL注入就是传一些语句导致原来的SQL语句改变了修改代码通过设置参数的方式就能防止SQL注入实际上我们进行了一个转化将字符和关......
  • 02 Statement和PreparedStatement
    文章目录StatementPreparedStatementStatement(1)相同的SQL语句,重复执行第n次,编译n次—效率低(2)Statementsql中的参数赋值直接通过字符串拼接,可能会有非法sql注入,导致数据泄露importjava.sql.*;importjava.util.Scanner;publicclassLogin{pu......
  • 基于preparedStatement对数据的增删改查,以及全自动遍历
    1packagecom.atsyc.api.preparedstatement;23/*4*使用preparedStatement进行t_user表的增删改查动作5*/67importcom.mysql.cj.xdevapi.PreparableStatement;8importorg.junit.Test;910importjava.sql.*;11importjava.util.*;......
  • 基于preparedStatement方式优化
    1packagecom.atsyc.api.preparedstatement;23/*4*使用预编译statement完成用户登录5*6*TODO:7*防止注入攻击,演示preparedstatement完成用户登录8*/910importjava.sql.*;11importjava.util.Scanner;1213publicclassPSUserLogi......
  • 基于statement,明确jdbc流程,发现问题,引出preparedstatement
    packagecom.atsyc.api.statement;importcom.mysql.cj.jdbc.Driver;importjava.sql.*;importjava.util.Properties;importjava.util.Scanner;/**TODO:*1.明确jdbc的使用流程和详细讲解内部设计api方法*2.发现问题,引出preparedStatement......
  • [粘贴]关于preparedStatement
    作者:wuxinliulei链接:https://www.zhihu.com/question/37043270/answer/83914933来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这个问题的答案,可以参看这篇文章:http://www.importnew.com/5006.htmlJDBC为什么要使用PreparedStatement而不是S......
  • 如何使用 PreparedStatement 来避免 SQL 注入,并提高性能?
    ✨前言✨本篇文章主要如何使用PreparedStatement来避免SQL注入,并提高性能?......
  • 20230629 java.sql.PreparedStatement
    介绍java.sql.PreparedStatementpublicinterfacePreparedStatementextendsStatement预备语句APIpublicaddBatchclearParametersgetMetaData结果集元数据ResultSetMetaDatagetParameterMetaData预备语句参数的元数据ParameterMetaDataexecutee......
  • JDBC之常规插入,Statement和PreparedStatement批处理时间问题
    已经封装好的通用的批处理语句:importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.sql.*;importjava.util.Properties;/**是一个工具类:作用:用于封装通用的获取连接、通用的增删改、通用的查询版本:v0.0.0.1方法:ge......
  • JDBC preparedStatement.executeQuery() 与 preparedStatement.executeQuery(sql)
    preparedStatement.executeQuery()这个方法是执行带占位符、已经预编译的sql命令而它--->preparedStatement.executeQuery(sql)这个方法是执行未预编译、完整的sql命令,而不是预编译的sql命令preparedStatement不是应该执行预编译的sql吗?是这样的,但是preparedStatement还兼......