Dela via


Använda SQL Escape-sekvenser

Ladda ned JDBC-drivrutin

Microsoft JDBC-drivrutinen för SQL Server stöder användning av SQL-escape-sekvenser, enligt definitionen i JDBC-API:et. Escape-sekvenser används i en SQL-instruktion för att tala om för drivrutinen att den undantagna delen av SQL-strängen ska hanteras på ett annat sätt. När JDBC-drivrutinen bearbetar den undantagna delen av en SQL-sträng översätts den delen av strängen till SQL-kod som SQL Server förstår.

Det finns fem typer av escape-sekvenser som JDBC-API:et kräver, och alla stöds av JDBC-drivrutinen:

  • LIKE jokerteckenliteraler
  • Funktionshantering
  • Datum- och tidsliteraler
  • Lagrat proceduranrop
  • Yttre kopplingar
  • Begränsa escape-syntax

Escape-sekvenssyntaxen som används av JDBC-drivrutinen är följande:

{keyword ...parameters...}

Anmärkning

SQL Escape-bearbetning är alltid aktiverat för JDBC-drivrutinen.

I följande avsnitt beskrivs de fem typerna av escape-sekvenser och hur de stöds av JDBC-drivrutinen.

LIKE jokerteckenliteraler

JDBC-drivrutinen stöder syntaxen {escape 'escape character'} för att använda LIKE-satsens jokertecken bokstavligt. Följande kod returnerar till exempel värden för col3, där värdet för col2 bokstavligen börjar med ett understreck (och inte dess jokerteckenanvändning).

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

Anmärkning

Escape-sekvensen måste vara i slutet av SQL-instruktionen. För flera SQL-instruktioner i en kommandosträng måste escape-sekvensen finnas i slutet av varje relevant SQL-instruktion.

Funktionshantering

JDBC-drivrutinen stöder funktionsutrymningssekvenser i SQL-instruktioner med följande syntax:

{fn functionName}  

där functionName är en funktion som stöds av JDBC-drivrutinen. Till exempel:

SELECT {fn UCASE(Name)} FROM Employee  

I följande tabell visas de olika funktioner som stöds av JDBC-drivrutinen när du använder en funktions escape-sekvens:

Strängfunktioner Numeriska funktioner Datum- och tidsfunktioner Systemfunktioner
ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LÄNGD

LOKALISERA

LTRIM

REPETERA

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE
ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

FÄLTBÄDD

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

Synd

SQRT

TAN

Trunkera
CURDATE

CURTIME

DAGNAMN

DAYOFMONTH

DAYOFWEEK

DAGPÅÅRET

UTDRAG

HOUR

MINUTE

MONTH

MÅNADSNAMN

NU

FJÄRDEDEL

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

VECKA

YEAR
DATABAS

IFNULL

USER

Anmärkning

Om du försöker använda en funktion som databasen inte stöder uppstår ett fel.

Datum- och tidsliteraler

Escape-syntaxen för datum, tid och tidsstämpelliteraler är följande:

{literal-type 'value'}  

var literal-type är något av följande:

Literaltyp Description Värdeformat
d Date åååå-mm-dd
t Time hh:mm:ss [1]
ts Tidsstämpel åååå-mm-dd hh:mm:ss[.f...]

Till exempel:

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

Anrop av lagrade procedurer

JDBC-drivrutinen stöder {? = call proc_name(?,...)} och {call proc_name(?,...)} escape-syntaxen för lagrade proceduranrop, beroende på om du behöver bearbeta en returparameter.

En procedur är ett körbart objekt som lagras i databasen. I allmänhet är det en eller flera SQL-instruktioner som har förkompilerats. Escape-sekvenssyntaxen för att anropa en lagrad procedur är följande:

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

där procedure-name anger namnet på en lagrad procedur och parameter anger en parameter för lagrad procedur.

Mer information om hur du använder escape-sekvensen call med lagrade procedurer finns i Använda instruktioner med lagrade procedurer.

Yttre kopplingar

JDBC-drivrutinen stöder SQL92 vänster, höger och fullständig yttre kopplingssyntax. Escape-sekvensen för yttre kopplingar är följande:

{oj outer-join}  

där yttre koppling är:

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

där table-reference är ett tabellnamn och search-condition är det kopplingsvillkor som du vill använda för tabellerna.

Till exempel:

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'  

Följande outer join-escape-sekvenser stöds av JDBC-drivrutinen.

  • Vänster yttre kopplingar
  • Höger yttre kopplingar
  • Fullständiga yttre kopplingar
  • Kapslade yttre kopplingar

Begränsa escape-syntax

Anmärkning

LIMIT-escape-syntaxen stöds endast av Microsoft JDBC Driver 4.2 (eller senare) för SQL Server när du använder JDBC 4.1 eller senare.

Escape-syntaxen för LIMIT är följande:

LIMIT <rows> [OFFSET <row offset>]  

Escape-syntaxen har två delar: <rader> är obligatoriska och anger antalet rader som ska returneras. OFFSET och <radförskjutning> är valfria och anger antalet rader som ska hoppa över innan du börjar returnera rader. JDBC-drivrutinen stöder endast den obligatoriska delen genom att transformera frågan så att den använder TOP i stället för LIMIT. SQL Server stöder inte LIMIT-satsen. JDBC-drivrutinen stöder inte den valfria <radförskjutningen> och drivrutinen utlöser ett undantag om den används.

Se även

Användning av uttalanden med JDBC-drivrutinen