开发指南—Prepared语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 本文介绍了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):用户权限管理
162 0
|
Web App开发 安全 测试技术
|
Windows
Windows XP下USB转串口驱动编码实现分析
       USB转COM驱动的编写实现有很多中方法,最近在网络上看到一个最常用的方式,即是虚拟一个COM口,在COM初试的时候进行打开一个USB设备.
1143 0
|
3天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
6天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
395 93
|
6天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
395 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%