Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Driver Microsoft JDBC untuk SQL Server menggunakan jenis data tingkat lanjut JDBC untuk mengonversi jenis data SQL Server ke format yang dipahami oleh bahasa pemrograman Java.
Keterangan
Tabel berikut mencantumkan pemetaan default antara jenis data bahasa pemrograman SQL Server, JDBC, dan Java tingkat lanjut.
| Jenis SQL Server | Jenis JDBC (java.sql.Type) | Jenis Bahasa Java |
|---|---|---|
| varbinary(max) citra |
LONGVARBINARY | byte[] (default), Blob, InputStream, String |
| kirim pesan teks varchar(max) |
LONGVARCHAR | String (default), Clob, InputStream |
| ntext nvarchar(maks) |
LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
String (default), Clob, NClob |
| xml | LONGVARCHAR SQLXML |
String (default), InputStream, Clob, byte[], Blob, SQLXML |
| Udt1 | VARBINARY | String (default), byte[], InputStream |
| sqlvariant | SQLVARIANT | Objek |
| geometri geografi |
VARBINARY | byte[] |
| JSON | microsoft.sql.Types.JSON | String (default), InputStream |
| vektor | microsoft.sql.Tipe.VECTOR | microsoft.sql.Vector |
1 Driver Microsoft JDBC untuk SQL Server mendukung pengiriman dan pengambilan UDT CLR sebagai data biner tetapi tidak mendukung manipulasi metadata CLR.
Bagian berikut memberikan contoh bagaimana Anda dapat menggunakan driver JDBC dan jenis data tingkat lanjut.
Jenis data BLOB dan CLOB dan NCLOB
Driver JDBC mengimplementasikan semua metode antarmuka java.sql.Blob, java.sql.Clob, dan java.sql.NClob.
Catatan
Nilai CLOB dapat digunakan dengan jenis data bernilai besar SQL Server 2005 (9.x) (atau yang lebih baru). Secara khusus, jenis CLOB dapat digunakan dengan jenis data varchar(max) dan nvarchar(max), jenis BLOB dapat digunakan dengan jenis data varbinary(max) dan gambar , dan jenis NCLOB dapat digunakan dengan ntext dan nvarchar(max).
Jenis data nilai besar
Dalam versi SQL Server yang lebih lama, bekerja dengan jenis data bernilai besar yang diperlukan penanganan khusus. Jenis data bernilai besar adalah jenis yang melebihi ukuran baris maksimum 8 KB. SQL Server memperkenalkan penentu maksimum untuk jenis data varchar, nvarchar, dan varbinary untuk memungkinkan penyimpanan nilai sebesar 2^31 byte. Kolom tabel dan variabel Transact-SQL dapat menentukan jenis data varchar(max), nvarchar(max), atau varbinary(max ).
Skenario utama untuk bekerja dengan jenis nilai besar melibatkan pengambilannya dari database, atau menambahkannya ke database. Bagian berikut menjelaskan berbagai pendekatan untuk menyelesaikan tugas-tugas ini.
Mengambil jenis nilai besar dari database
Saat Anda mengambil jenis data bernilai besar nonbiner seperti jenis data varchar(maks) dari database, salah satu pendekatannya adalah membaca data tersebut sebagai aliran karakter. Dalam contoh berikut, metode executeQuery dari kelas SQLServerStatement digunakan untuk mengambil data dari database dan mengembalikannya sebagai kumpulan hasil. Kemudian metode getCharacterStream dari kelas SQLServerResultSet digunakan untuk membaca data bernilai besar dari kumpulan hasil.
ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
rs.next();
Reader reader = rs.getCharacterStream(2);
Catatan
Pendekatan yang sama ini juga dapat digunakan untuk jenis data teks, ntext, dan nvarchar(maks ).
Saat Anda mengambil jenis data bernilai besar biner seperti jenis data varbinary(maks) dari database, ada beberapa pendekatan yang dapat Anda ambil. Pendekatan yang paling efisien adalah membaca data sebagai aliran biner, seperti dalam contoh berikut:
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
InputStream is = rs.getBinaryStream(2);
Anda juga dapat menggunakan metode getBytes untuk membaca data sebagai array byte, seperti dalam contoh:
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
byte [] b = rs.getBytes(2);
Catatan
Anda juga dapat membaca data sebagai BLOB. Namun, membaca BLOB kurang efisien daripada dua metode yang ditunjukkan sebelumnya.
Menambahkan jenis nilai besar ke database
Mengunggah data besar dengan driver JDBC berfungsi dengan baik untuk kasus berukuran memori, dan dalam kasus yang lebih besar dari memori, streaming adalah opsi utama. Namun, cara paling efisien untuk mengunggah data besar adalah melalui antarmuka aliran.
Menggunakan String atau byte juga merupakan opsi, seperti dalam contoh berikut:
PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");
pstmt.setInt(1, 1);
pstmt.setString(2, htmlStr);
pstmt.executeUpdate();
Catatan
Pendekatan ini juga dapat digunakan untuk nilai yang disimpan dalam kolom teks, ntext, dan nvarchar(maks ).
Jika Anda memiliki pustaka gambar di server dan harus mengunggah seluruh file gambar biner ke kolom varbinary(max), metode paling efisien dengan driver JDBC adalah menggunakan aliran secara langsung, seperti dalam hal berikut:
try (PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (Col1, Col2) VALUES(?,?)")) {
File inputFile = new File("CLOBFile20mb.jpg");
try (FileInputStream inStream = new FileInputStream(inputFile)) {
int id = 1;
pstmt.setInt(1,id);
pstmt.setBinaryStream(2, inStream);
pstmt.executeUpdate();
}
}
Catatan
Menggunakan metode CLOB atau BLOB bukanlah cara yang efisien untuk mengunggah data besar.
Memodifikasi jenis nilai besar dalam database
Dalam kebanyakan kasus, metode yang direkomendasikan untuk memperbarui atau memodifikasi nilai besar pada database adalah meneruskan parameter melalui kelas SQLServerPreparedStatement dan SQLServerCallableStatement
Jika Anda harus mengganti instans kata dalam file teks besar, seperti file HTML yang diarsipkan, Anda dapat menggunakan objek Clob, seperti dalam contoh berikut:
String SQL = "SELECT * FROM test1;";
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
ResultSet rs = stmt.executeQuery(SQL)) {
rs.next();
Clob clob = rs.getClob(2);
long pos = clob.position("dog", 1);
clob.setString(pos, "cat");
rs.updateClob(2, clob);
rs.updateRow();
}
Selain itu, Anda dapat melakukan semua pekerjaan di server dan hanya meneruskan parameter ke pernyataan UPDATE yang disiapkan.
Untuk informasi selengkapnya tentang jenis nilai besar, lihat "Menggunakan Jenis Nilai Besar" di Buku SQL Server Online.
Jenis data XML
SQL Server menyediakan jenis data xml yang memungkinkan Anda menyimpan dokumen dan fragmen XML dalam database SQL Server. Jenis data xml adalah jenis data bawaan di SQL Server, dan dalam beberapa cara mirip dengan jenis bawaan lainnya, seperti int dan varchar. Seperti jenis bawaan lainnya, Anda dapat menggunakan jenis data xml sebagai jenis kolom saat membuat tabel; sebagai jenis variabel, jenis parameter, atau jenis pengembalian fungsi; atau dalam fungsi Transact-SQL CAST dan CONVERT.
Dalam driver JDBC, jenis data xml dapat dipetakan sebagai objek String, byte array, stream, CLOB, BLOB, atau SQLXML. String adalah default. Di Driver JDBC versi 2.0 dan yang lebih baru, driver JDBC menyediakan dukungan untuk API JDBC 4.0, yang memperkenalkan antarmuka SQLXML. Antarmuka SQLXML mendefinisikan metode untuk berinteraksi dan memanipulasi data XML. Jenis data SQLXML memetakan ke jenis data xml SQL Server. Untuk informasi selengkapnya tentang cara membaca dan menulis data XML dari dan ke database relasional dengan jenis data Java SQLXML , lihat Mendukung data XML.
Implementasi jenis data xml di driver JDBC menyediakan dukungan untuk hal berikut:
Akses ke XML sebagai string Java UTF-16 standar untuk skenario pemrograman yang paling umum
Input UTF-8 dan XML berkode 8-bit lainnya
Akses ke XML sebagai array byte dengan BOM terkemuka saat dikodekan di UTF-16 untuk pertukaran dengan prosesor XML dan file disk lainnya
SQL Server memerlukan BOM terkemuka untuk XML yang dikodekan UTF-16. Aplikasi harus menyediakan BOM di awal saat nilai parameter XML diberikan sebagai array byte. SQL Server selalu mengeluarkan nilai XML sebagai string UTF-16 tanpa BOM atau deklarasi pengodean yang disematkan. Ketika nilai XML diambil sebagai byte[], BinaryStream, atau Blob, BOM UTF-16 ditambahkan di bagian depan nilai tersebut.
Untuk informasi selengkapnya tentang jenis data xml , lihat "Jenis Data xml" di SQL Server Books Online.
Jenis data yang ditentukan pengguna
Pengenalan jenis yang ditentukan pengguna (UDT) di SQL Server 2005 (9.x) memperluas sistem jenis SQL dengan memungkinkan Anda menyimpan objek dan struktur data kustom dalam database SQL Server. UDT dapat berisi beberapa jenis data dan dapat memiliki perilaku, membedakannya dari jenis data alias tradisional yang terdiri dari satu jenis data sistem SQL Server. UDT didefinisikan dengan menggunakan salah satu bahasa yang didukung oleh Microsoft .NET common language runtime (CLR) yang menghasilkan kode yang dapat diverifikasi, termasuk Microsoft Visual C# dan Visual Basic .NET. Data diekspos sebagai bidang dan properti kelas atau struktur berbasis .NET Framework, metode kelas atau struktur menentukan perilaku.
Di SQL Server, UDT dapat digunakan sebagai definisi kolom tabel, sebagai variabel dalam batch Transact-SQL, atau sebagai argumen fungsi Transact-SQL atau prosedur tersimpan.
Untuk informasi selengkapnya tentang jenis data yang ditentukan pengguna, lihat "Menggunakan dan Memodifikasi Instans Jenis yang Ditentukan Pengguna" di SQL Server Books Online.
jenis data Sql_variant
Untuk informasi tentang jenis data sql_variant, lihat Menggunakan jenis data Sql_variant.
Jenis data spasial
Untuk informasi tentang jenis data spasial, lihat Menggunakan Tipe Data Spasial.
Jenis data JSON
Untuk informasi tentang jenis data JSON, lihat Jenis data JSON.
Jenis Data Vektor
Untuk informasi tentang jenis data vektor, lihat Jenis data vektor.