开发指南—Prepared语句-阿里云开发者社区

开发者社区> -技术小能手-> 正文

开发指南—Prepared语句

简介: 本文介绍了Prepare协议的概念、用途及在Java中的开启方法。
+关注继续查看

Prepare协议介绍

Prepare协议分为两种模式:

  • 二进制模式:该模式基于高效的客户端/服务器二进制协议,是程序开发中最常用的模式;
  • 文本模式:该模式基于SQL语法来实现,包括PREPARE/EXECUTE/DEALLOCATE PREPARE三种语句。

PolarDB-X对这两种模式均提供支持。使用预处理语句和占位符来获取参数值具有以下优势:

  • 每次执行时解析语句的开销都较小。通常情况下,数据库应用程序处理大量几乎相同的语句,只改变Prepare语句中的变量值,这样可以大幅度提升SQL执行效率。
  • 防止SQL注入攻击。

二进制模式

二进制Prepare协议支持使用JDBC及其他各种语言,MySQL支持范围可参见Prepared Statements。PolarDB-X的支持情况如下:

  • Prepare协议支持范围:
  • Prepare协议SQL支持范围:支持所有DML语句,例如:SELECT、UPDATE、DELETE、INSERT等。
  • Prepare协议SQL不支持范围:不支持DML以外其他SQL语句,例如:SHOW、SET等。

在Java中开启Prepare协议

  • 在JAVA客户端中,如果需要使用Prepare协议,需要显式在URL连接串中增加useServerPrepStmts=true参数,如果不指定此参数,则PreparedStatement默认会走普通查询。
  • 如:jdbc:mysql://xxxxxx:3306/xxxxxx?useServerPrepStmts=true

Java使用示例:


Class.forName("com.mysql.jdbc.Driver");
Connection connection =  DriverManager.getConnection("jdbc:mysql://xxxxxx:3306/xxxxxx?useServerPrepStmts=true", "xxxxx", "xxxxx");
String sql = "insert into batch values(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setInt(1, 0);
preparedStatement.setString(2, "polardb-x");
preparedStatement.executeUpdate();

文本模式

首先通过PREPARE语句给预处理语句preparable_stmt指定名称stmt_name,其中stmt_name不区分大小写,并且preparable_stmt只能为单语句。


PREPARE stmt_name FROM preparable_stmt;

接着通过EXECUTE语句执行指定的预处理语句,如果预处理语句包含参数占位符的话,必须用USING子句指定用户定义变量作为参数。


EXECUTE stmt_name [USING @var_name [, @var_name] ...];

最后通过DEALLOCATE PREPARE语句来释放清理预处理语句。


DEALLOCATE PREPARE stmt_name;

示例如下:


mysql> PREPARE stmt2 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 6;
mysql> SET @b = 8;
mysql> EXECUTE stmt2 USING @a, @b;
+------------+
| hypotenuse |
+------------+
|         10 |
+------------+
mysql> DEALLOCATE PREPARE stmt2;


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS(iPhone/iPad)开发新手必读
Objective-C 入门 一个简单的可以快速上手的 Objective-C 入门教程。 iOS概述 本文对构成iOS的基础特性提供了高层的概述,帮助你了解这个平台。 基于Xcode4开发第一个iPhone程序:“Hello World” 由宝玉出品的非常详尽的iOS开发入门教程。
753 0
【Spring开发】—— Spring Core
原文:【Spring开发】—— Spring Core 前言   最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。
852 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7751 0
WPF和Expression Blend开发实例:一个样式实现的数字输入框
原文:WPF和Expression Blend开发实例:一个样式实现的数字输入框 今天来一个比较奇淫技巧的手法,很少人用,同时也不推荐太过频繁的使用. 先上样式: ...
772 0
使用 WordPress 插件模板开发高质量插件
  WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件。样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可。     官方网站      源码下载   您可能感兴趣的相关文章 网站开发中很有用的 j...
568 0
Apache Mina开发手册
Apache Mina开发手册 一、介绍 Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。
1005 0
1280
文章
0
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载