Menggunakan jenis data tingkat lanjut

Unduh driver JDBC

Driver Microsoft JDBC untuk SQL Server menggunakan jenis data tingkat lanjut JDBC untuk mengonversi jenis data SQL Server ke format yang dapat dipahami oleh bahasa pemrograman Java.

Keterangan

Tabel berikut mencantumkan pemetaan default antara jenis data bahasa pemrograman tingkat lanjut SQL Server, JDBC, dan Java.

Jenis SQL Server Jenis JDBC (java.sql.Types) Jenis Bahasa Java
varbinary(max)

gambar
LONGVARBINARY byte[] (default), Blob, InputStream, String
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 Object
geometry

geografi
VARBINARY byte[]

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 sebelumnya, bekerja dengan jenis data bernilai besar memerlukan penanganan khusus. Jenis data bernilai besar adalah 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 bernilai besar melibatkan pengambilannya dari database, atau menambahkannya ke database. Bagian berikut ini menjelaskan berbagai pendekatan untuk menyelesaikan tugas-tugas ini.

Mengambil jenis bernilai besar dari database

Saat Anda mengambil jenis data bernilai besar non-biner 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(max ).

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 hal 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 hal berikut:

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");  
rs.next();  
byte [] b = rs.getBytes(2);  

Catatan

Anda juga dapat membaca data sebagai BLOB. Namun, ini kurang efisien daripada dua metode yang ditunjukkan sebelumnya.

Menambahkan jenis bernilai 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 hal 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(max ).

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 dengan menggunakan perintah Transact-SQL seperti UPDATE, WRITE, dan SUBSTRING.

Jika Anda harus mengganti instans kata dalam file teks besar, seperti file HTML yang diarsipkan, Anda dapat menggunakan objek Clob, seperti dalam hal 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 bernilai besar, lihat "Menggunakan Jenis Large-Value" di SQL Server Books 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 bisa menggunakan tipe 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. Dimulai dengan Driver JDBC versi 2.0, driver JDBC menyediakan dukungan untuk API JDBC 4.0, yang memperkenalkan antarmuka SQLXML. Antarmuka SQLXML menentukan metode untuk berinteraksi dan memanipulasi data XML. Jenis data SQLXML memetakan ke jenis data SQL Server xml. 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 dalam 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 ini ketika nilai parameter XML disediakan 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 telah ditunda ke nilai .

Untuk informasi selengkapnya tentang jenis data xml, lihat "Jenis Data xml" di SQL Server Buku 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. Ini termasuk Microsoft Visual C# dan Visual Basic .NET. Data diekspos sebagai bidang dan properti kelas atau struktur berbasis .NET Framework, dan perilaku ditentukan oleh metode kelas atau struktur.

Dalam 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.

Sql_variant tipe data

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.

Lihat juga

Memahami jenis data driver JDBC