按照 JDBC API 的定义,Microsoft SQL Server JDBC 驱动程序支持使用 SQL 转义序列。转义序列用于 SQL 语句内,以告诉驱动程序应以不同的方式处理 SQL 字符串的转义部分。当 JDBC 驱动程序处理 SQL 字符串的转义部分时,它会将字符串的这一部分转换为 SQL Server 可以理解的 SQL 代码。
JDBC API 需要五种类型的转义序列,JDBC 驱动程序支持所有这些转义序列:
-
LIKE 通配符文本
-
函数处理
-
日期和时间文本
-
存储过程调用
-
外部联接
JDBC 驱动程序使用的转义序列语法如下所示:
{keyword ...parameters...}
以下各部分介绍五种类型的转义序列以及 JDBC 驱动程序如何支持它们。
LIKE 通配符文本
JDBC 驱动程序支持 {escape 'escape character'}
语法,以便将 LIKE 子句通配符用作文本。例如,以下代码将返回 col3 的值,其中 col2 的值实际上以下划线开始(而不是对其使用通配符)。
ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2 LIKE '\\_%' {escape '\\'}");
函数处理
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 |
日期 |
yyyy-mm-dd |
t |
时间 |
hh:mm:ss [1] |
ts |
时间戳 |
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 驱动程序支持以下外部联接转义序列:
-
左外部联接
-
右外部联接
-
完全外部联接
-
嵌套外部联接