开发指南—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;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 安全 关系型数据库
MySQL数据库(24):用户权限管理
MySQL数据库(24):用户权限管理
174 0
|
Web App开发 安全 测试技术
|
Windows
Windows XP下USB转串口驱动编码实现分析
       USB转COM驱动的编写实现有很多中方法,最近在网络上看到一个最常用的方式,即是虚拟一个COM口,在COM初试的时候进行打开一个USB设备.
1157 0
|
5天前
|
数据采集 人工智能 安全
|
14天前
|
云安全 监控 安全
|
1天前
|
存储 SQL 大数据
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
231 156
|
8天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
583 5