Бөлісу құралы:


Использование escape-последовательностей SQL

Скачать драйвер JDBC

Согласно определению API JDBC, драйвер Microsoft JDBC Driver for SQL Server поддерживает использование escape-последовательностей SQL. Escape-последовательности используются в инструкции SQL, чтобы сообщить драйверу, что экранированная часть строки SQL должна обрабатываться иначе. Когда драйвер JDBC обрабатывает экранированную часть строки SQL, она преобразует ее в код SQL, который понимает SQL Server.

Существует пять типов escape-последовательностей, требуемых API JDBC, и все они поддерживаются драйвером JDBC:

  • Литералы-шаблоны LIKE
  • Обработка функций
  • Литералы даты и времени
  • Вызовы хранимых процедур
  • Внешние соединения
  • Escape-синтаксис LIMIT

Драйвер JDBC использует следующий синтаксис escape-последовательности:

{keyword ...parameters...}

Примечание.

Для драйвера JDBC всегда включена обработка escape-последовательностей SQL.

В следующих разделах описывается пять типов escape-последовательностей и способы их поддержки драйвером JDBC.

Литералы-шаблоны LIKE

Драйвер JDBC поддерживает синтаксис {escape 'escape character'} для использования шаблонов предложения LIKE в качестве литералов. Например, в следующем коде возвращаются значения col3, для которых значение col2 начинается с символа подчеркивания (и не используется как шаблон).

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

Примечание.

Escape-последовательность должна быть в конце инструкции SQL. При наличии в командной строке нескольких инструкций SQL escape-последовательность должна быть в конце каждой соответствующей инструкции SQL.

Обработка функций

Драйвер JDBC поддерживает использование escape-последовательностей функций в инструкциях SQL со следующим синтаксисом:

{fn functionName}  

где functionName представляет собой функцию, поддерживаемую драйвером JDBC. Например:

SELECT {fn UCASE(Name)} FROM Employee  

В следующей таблице перечислены различные функции, поддерживаемые драйвером JDBC при использовании escape-последовательностей функций:

Строковые функции Числовые функции Функции Datetime Системные функции
ASCII

CHAR

CONCAT

DIFFERENCE

ВСТАВИТЬ

LCASE

LEFT

LENGTH

НАЙТИ

LTRIM

Повторение…

ЗАМЕНИТЬ

RIGHT

RTRIM

SOUNDEX

ПРОБЕЛ

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

ЭТАЖ

ЖУРНАЛ

LOG10

MOD

PI

ПИТАНИЕ

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE
CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

ВТОРОЙ

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR
DATABASE

IFNULL

Пользователь

Примечание.

Использование функции, не поддерживаемой базой данных, приведет к возникновению ошибки.

Литералы даты и времени

Ниже приводится синтаксис escape-последовательности для литералов даты, времени и отметок времени:

{literal-type 'value'}  

где literal-type является одним из следующих:

Тип литерала Description Формат значения
d Дата гггг-мм-дд
t Время чч:мм:сс [1]
ts TimeStamp гггг-мм-дд чч:мм:сс[.f...]

Например:

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

Вызовы хранимых процедур

Драйвер JDBC поддерживает синтаксис escape-последовательностей {? = call proc_name(?,...)} и {call proc_name(?,...)} для вызовов хранимых процедур, в зависимости от того, требуется ли обработка возвращаемого параметра.

Процедура представляет собой исполняемый объект, который хранится в базе данных. Обычно процедурой является одна или несколько заранее скомпилированных инструкций SQL. Ниже приводится синтаксис escape-последовательности вызова хранимой процедуры:

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

где procedure-name указывает имя хранимой процедуры, а parameter указывает параметр хранимой процедуры.

См. сведения об использовании escape-последовательностей call с хранимыми процедурами.

Внешние соединения

Драйвер JDBC поддерживает синтаксис левого, правого и полного внешнего соединения SQL92. Ниже приводится синтаксис escape-последовательности для внешних соединений:

{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 поддерживает следующие escape-последовательности внешнего соединения:

  • Левые внешние соединения
  • Правые внешние соединения
  • Полные внешние соединения
  • Вложенные внешние соединения

Escape-синтаксис LIMIT

Примечание.

Escape-синтаксис LIMIT поддерживается только драйвером Microsoft JDBC Driver 4.2 (и более поздних версий) для SQL Server при использовании JDBC 4.1 или более поздней версии.

Escape-синтаксис LIMIT выглядит следующим образом:

LIMIT <rows> [OFFSET <row offset>]  

Escape-синтаксис состоит из двух частей. <Строки> — это обязательная часть, которая указывает число возвращаемых строк. OFFSET и <смещение строки> — это необязательные компоненты, указывающие число строк, которые необходимо пропустить перед началом получения строк. Драйвер JDBC поддерживает только обязательную часть, преобразуя запрос для использования TOP вместо LIMIT. SQL Server не поддерживает предложение LIMIT. Драйвер JDBC не поддерживает необязательную часть <смещение строки>. При ее использовании драйвер вызовет исключение.

См. также

Использование инструкций с JDBC Driver