使用 SQL 跳脫序列

下載 JDBC 驅動程式

Microsoft SQL Server 的 JDBC Driver 支援 SQL 逸出序列的使用,如 JDBC API 中所定義。 逸出序列是在 SQL 語句內用來告訴驅動程式 SQL 字串的逸出部分應該以不同的方式處理。 當 JDBC 驅動程式處理 SQL 字串的逸出部分時,它會將字串的該部分轉譯成 SQL Server 所瞭解的 SQL 程式代碼。

JDBC API 需要的逸出序列有五種,而且這五種都受到 JDBC 驅動程式的支援:

  • LIKE 中的萬用字元常值
  • 函數處理
  • 日期與時間常值
  • 預存程序呼叫
  • 外部連接
  • 限制跳脫語法

JDBC 驅動程式所使用的逸出序列語法如下:

{keyword ...parameters...}

注意

JDBC 驅動程式的 SQL 逸出處理永遠保持開啟狀態。

下列幾節描述五種逸出序列,以及它們如何受到 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

差異

INSERT

LCASE

左

長度

定位

LTRIM

重複

取代

右

RTRIM

SOUNDEX

SPACE

子字串

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

天花板

COS

COT

度

EXP

樓層

LOG

LOG10

MOD

PI

電源

RADIANS

RAND

ROUND

標誌

SIN

SQRT

TAN

截斷
CURDATE

CURTIME

DAYNAME

月份中的日期

DAYOFWEEK

DAYOFYEAR

擷取

小時

分鐘

月

MONTHNAME

現在

季度

秒

TIMESTAMPADD

TIMESTAMPDIFF

週

年
DATABASE

IFNULL

USER

注意

如果您嘗試使用資料庫不支援的函數,將會發生錯誤。

日期與時間常值

日期、時間和時間戳記常值的逸出語法如下:

{literal-type 'value'}  

其中 literal-type 是下列其中之一:

字面值型別 描述 數值格式
d 日期 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>]  

逸出語法有兩個部分:<rows> 是必要項,指定要傳回的資料列數目。 OFFSET 和 <row offset> 為選擇性項目,指定開始傳回資料列之前要略過的資料列數目。 JDBC 驅動程式只支援必要的部分,方法是轉換查詢為使用 TOP,而非 LIMIT。 SQL Server 不支援 LIMIT 子句。 JDBC 驅動程式不支援選用的 <資料列位移>,如果使用此功能,驅動程式就會引發例外狀況。