使用 SQL 转义序列

下载 JDBC 驱动程序

按照 JDBC API 的定义,Microsoft JDBC Driver for SQL Server 支持使用 SQL 转义序列。 转义序列用于 SQL 语句内,以告诉驱动程序应以不同的方式处理 SQL 字符串的转义部分。 当 JDBC 驱动程序处理 SQL 字符串的转义部分时,它会将字符串的这一部分转换为 SQL Server 可以理解的 SQL 代码。

JDBC API 需要五种类型的转义序列,JDBC 驱动程序支持所有这些转义序列:

  • LIKE 通配符文本
  • 函数处理
  • 日期和时间文本
  • 存储过程调用
  • 外部联接
  • 限制转义语法

JDBC 驱动程序使用的转义序列语法如下所示:

{keyword ...parameters...}

注意

SQL 转义处理对于 JDBC 驱动程序始终是打开的。

以下各部分介绍五种类型的转义序列以及 JDBC 驱动程序如何支持它们。

LIKE 通配符文本

JDBC 驱动程序支持 {escape 'escape character'} 语法,以便将 LIKE 子句通配符用作文本。 例如,以下代码将返回 col3 的值,其中 col2 的值实际上以下划线开始(而不是对其使用通配符)。

ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2   
LIKE '\\_%' {escape '\\'}");  

注意

转义序列必须位于 SQL 语句的结尾。 如果一个命令字符串中有多个 SQL 语句,则转义序列需要位于每个相关 SQL 语句的结尾。

函数处理

JDBC 驱动程序使用以下语法在 SQL 语句中支持函数转义序列:

{fn functionName}  

其中,functionName 是由 JDBC 驱动程序支持的函数。 例如:

SELECT {fn UCASE(Name)} FROM Employee  

下表列出当使用函数转义序列时,JDBC 驱动程序支持的各种函数:

字符串函数 数值函数 日期时间函数 系统函数
ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LENGTH

LOCATE

LTRIM

REPEAT

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR
DATABASE

IFNULL

USER

注意

如果您试图使用数据库不支持的函数,则将发生错误。

日期和时间文本

用于日期、时间和时间戳文本的转义语法如下所示:

{literal-type 'value'}  

其中,literal-type 为以下值之一:

文本类型 说明 值格式
d Date yyyy-mm-dd
t 时间 hh:mm:ss [1]
ts TimeStamp yyyy-mm-dd hh:mm:ss[.f...]

例如:

UPDATE Orders SET OpenDate={d '2005-01-31'}
WHERE OrderID=1025  

存储过程调用

JDBC 驱动程序对于存储过程调用支持 {? = call proc_name(?,...)}{call proc_name(?,...)} 转义语法,具体取决于是否需要处理返回参数。

过程是存储在数据库中的可执行对象。 通常,它是一个或更多的已经预编译的 SQL 语句。 调用存储过程的转义序列语法如下所示:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}  

其中,procedure-name 指定存储过程的名称,parameter 指定存储过程参数。

有关将 call 转义序列用于存储过程的详细信息,请参阅结合使用语句和存储过程

外部联接

JDBC 驱动程序支持 SQL92 左联接、右联接和完全外部联接语法。 外部联接的转义序列如下所示:

{oj outer-join}  

其中,外部联接为:

table-reference {LEFT | RIGHT | FULL} OUTER JOIN
{table-reference | outer-join} ON search-condition  

其中,table-reference 为表名,search-condition 为要用于这些表的联接条件。

例如:

SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status
   FROM {oj Customers LEFT OUTER JOIN
      Orders ON Customers.CustID=Orders.CustID}
   WHERE Orders.Status='OPEN'  

JDBC 驱动程序支持以下外部联接转义序列:

  • 左外部联接
  • 右外部联接
  • 完全外部联接
  • 嵌套外部联接

限制转义语法

注意

在使用 JDBC 4.1 或更高版本时,LIMIT 转义语法仅受 Microsoft JDBC Driver 4.2 for SQL Server(或更高版本)支持。

LIMIT 的转义语法如下所示:

LIMIT <rows> [OFFSET <row offset>]  

转义语法有两个部分:<行> 是必需部分,用于指定要返回的行数。 OFFSET 和 <行偏移> 都是可选部分,用于指定在开始返回行之前要跳过的行数。 JDBC 驱动程序通过将查询转换为使用 TOP 而不是 LIMIT,仅支持必需部分。 SQL Server 不支持 LIMIT 子句。 JDBC 驱动程序不支持可选的 <行偏移>;如果使用它,驱动程序将引发异常。

另请参阅

通过 JDBC 驱动程序使用语句