当前位置: 易点彩票 > 信息展示 >

开发指南—Prepared语句

时间:2022-07-02 14:47来源:易点彩票 点击:

Prepare协议介绍

Prepare协议分为两种模式:

二进制模式:该模式基于高效的客户端/服务器二进制协议,是程序开发中最常用的模式;

文本模式:该模式基于SQL语法来实现,包括PREPARE/EXECUTE/DEALLOCATEPREPARE三种语句。

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

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

防止SQL注入攻击。

二进制模式

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

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");Connectionconnection=DriverManager.getConnection("jdbc:mysql://xxxxxx:3306/xxxxxx?useServerPrepStmts=true","xxxxx","xxxxx");Stringsql="insertintobatchvalues(?,?)";PreparedStatementpreparedStatement=connection.prepareStatement(sql);preparedStatement.setInt(1,0);preparedStatement.setString(2,"polardb-x");preparedStatement.executeUpdate;

文本模式

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

PREPAREstmt_nameFROMpreparable_stmt;

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

EXECUTEstmt_name[USING@var_name[,@var_name]...];

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

DEALLOCATEPREPAREstmt_name;

示例如下:

mysql>PREPAREstmt2FROM'SELECTSQRT(POW(?,2)+POW(?,2))AShypotenuse';

mysql>SET@a=6;

mysql>SET@b=8;

mysql>EXECUTEstmt2USING@a,@b;

+------------+

|hypotenuse|

+------------+

|10|

+------------+

mysql>DEALLOCATEPREPAREstmt2;

------分隔线----------------------------
栏目列表
推荐内容
易点彩票平台,易点彩票官网,易点彩票网址,易点彩票下载,易点彩票app,易点彩票开户,易点彩票投注,易点彩票购彩,易点彩票注册,易点彩票登录,易点彩票邀请码,易点彩票技巧,易点彩票手机版,易点彩票靠谱吗,易点彩票走势图,易点彩票开奖结果