开发指南—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 
相关文章
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1042 151
|
4天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1731 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
680 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
644 13
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
406 4