Menggunakan urutan escape SQL
Driver Microsoft JDBC untuk SQL Server mendukung penggunaan urutan escape SQL, seperti yang didefinisikan oleh JDBC API. Urutan escape digunakan dalam pernyataan SQL untuk memberi tahu driver bahwa bagian yang lolos dari string SQL harus ditangani secara berbeda. Ketika driver JDBC memproses bagian yang lolos dari string SQL, driver tersebut menerjemahkan bagian string tersebut ke dalam kode SQL yang SQL Server pahami.
Ada lima jenis urutan escape yang diperlukan JDBC API, dan semuanya didukung oleh driver JDBC:
- SEPERTI literal kartubebas
- Penanganan fungsi
- Literal tanggal dan waktu
- Panggilan prosedur tersimpan
- Gabungan luar
- Batasi sintaks escape
Sintaks urutan escape yang digunakan oleh driver JDBC adalah sebagai berikut:
{keyword ...parameters...}
Catatan
Pemrosesan escape SQL selalu diaktifkan untuk driver JDBC.
Bagian berikut menjelaskan lima jenis urutan escape dan bagaimana urutan tersebut didukung oleh driver JDBC.
SEPERTI literal kartubebas
Driver JDBC mendukung {escape 'escape character'}
sintaks untuk menggunakan wildcard klausa LIKE sebagai harfiah. Misalnya, kode berikut akan mengembalikan nilai untuk col3, di mana nilai col2 secara harfiah dimulai dengan garis bawah (dan bukan penggunaan kartubebasnya).
ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2
LIKE '\\_%' {escape '\\'}");
Catatan
Urutan escape harus berada di akhir pernyataan SQL. Untuk beberapa pernyataan SQL dalam string perintah, urutan escape harus berada di akhir setiap pernyataan SQL yang relevan.
Penanganan fungsi
Driver JDBC mendukung urutan escape fungsi dalam pernyataan SQL dengan sintaks berikut:
{fn functionName}
di mana functionName
adalah fungsi yang didukung oleh driver JDBC. Contohnya:
SELECT {fn UCASE(Name)} FROM Employee
Tabel berikut mencantumkan berbagai fungsi yang didukung oleh driver JDBC saat menggunakan urutan escape fungsi:
Fungsi String | Fungsi numerik | Fungsi Datetime | Fungsi Sistem |
---|---|---|---|
ASCII CHAR CONCAT DIFFERENCE INSERT LCASE LEFT LENGTH MENEMUKAN 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 EKSTRAK HOUR MINUTE BULAN NAMA BULAN NOW KUARTAL SECOND TANDA WAKTU TIMESTAMPDIFF MINGGU TAHUN |
DATABASE IFNULL USER |
Catatan
Jika Anda mencoba menggunakan fungsi yang tidak didukung database, kesalahan akan terjadi.
Literal tanggal dan waktu
Sintaks escape untuk literal tanggal, waktu, dan tanda waktu adalah sebagai berikut:
{literal-type 'value'}
di mana literal-type
adalah salah satu hal berikut:
Jenis Harfiah | Deskripsi | Format Nilai |
---|---|---|
d | Tanggal | dd-mm-yyyy |
t | Waktu | hh:mm:ss [1] |
ts | TimeStamp | yyyy-mm-dd hh:mm:ss[.f...] |
Contohnya:
UPDATE Orders SET OpenDate={d '2005-01-31'}
WHERE OrderID=1025
Panggilan prosedur tersimpan
Driver JDBC mendukung {? = call proc_name(?,...)}
sintaks escape dan {call proc_name(?,...)}
untuk panggilan prosedur tersimpan, tergantung pada apakah Anda perlu memproses parameter pengembalian.
Prosedur adalah objek yang dapat dieksekusi yang disimpan dalam database. Umumnya, ini adalah satu atau beberapa pernyataan SQL yang telah dikommpilasikan sebelumnya. Sintaks urutan escape untuk memanggil prosedur tersimpan adalah sebagai berikut:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
di mana procedure-name
menentukan nama prosedur tersimpan dan parameter
menentukan parameter prosedur tersimpan.
Untuk informasi selengkapnya tentang menggunakan call
urutan escape dengan prosedur tersimpan, lihat Menggunakan Pernyataan dengan Prosedur Tersimpan.
Gabungan luar
Driver JDBC mendukung sintaks gabungan kiri, kanan, dan luar SQL92. Urutan escape untuk gabungan luar adalah sebagai berikut:
{oj outer-join}
di mana gabungan luar adalah:
table-reference {LEFT | RIGHT | FULL} OUTER JOIN
{table-reference | outer-join} ON search-condition
di mana table-reference
adalah nama tabel dan search-condition
merupakan kondisi gabungan yang ingin Anda gunakan untuk tabel.
Contohnya:
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'
Urutan escape gabungan luar berikut didukung oleh driver JDBC:
- Gabungan luar kiri
- Gabungan luar kanan
- Gabungan luar penuh
- Gabungan luar berlapis
Batasi sintaks escape
Catatan
Sintaks escape LIMIT hanya didukung oleh Microsoft JDBC Driver 4.2 (atau lebih tinggi) untuk SQL Server saat menggunakan JDBC 4.1 atau yang lebih tinggi.
Sintaks escape untuk LIMIT adalah sebagai berikut:
LIMIT <rows> [OFFSET <row offset>]
Sintaks escape memiliki dua bagian: <baris> wajib dan menentukan jumlah baris yang akan dikembalikan. OFFSET dan <offset> baris bersifat opsional dan menentukan jumlah baris yang akan dilewati sebelum mulai mengembalikan baris. Driver JDBC hanya mendukung bagian wajib dengan mengubah kueri untuk menggunakan TOP alih-alih LIMIT. SQL Server tidak mendukung klausa LIMIT. Driver JDBC tidak mendukung offset> baris opsional <dan driver akan memberikan pengecualian jika digunakan.