Menggunakan jenis data Sql_variant
Dimulai dengan versi 6.3.0, driver JDBC mendukung jenis data sql_variant. Sql_variant juga didukung saat menggunakan fitur seperti Table-Valued Parameter dan BulkCopy, dengan beberapa batasan. Tidak semua jenis data dapat disimpan dalam jenis data sql_variant. Untuk daftar jenis data yang didukung dengan sql_variant, lihat sql_variant (Transact-SQL).
Mengisi dan mengambil tabel
Dengan asumsi seseorang memiliki tabel dengan kolom sql_variant sebagai:
CREATE TABLE sampleTable (col1 sql_variant)
Contoh skrip untuk menyisipkan nilai menggunakan pernyataan:
try (Statement stmt = connection.createStatement()){
stmt.execute("insert into sampleTable values (1)");
}
Menyisipkan nilai menggunakan pernyataan yang disiapkan:
try (PreparedStatement preparedStatement = con.prepareStatement("insert into sampleTable values (?)")) {
preparedStatement.setObject(1, 1);
preparedStatement.execute();
}
Jika jenis data yang mendasar yang diteruskan diketahui, setter masing-masing dapat digunakan. Misalnya, preparedStatement.setInt()
dapat digunakan saat menyisipkan nilai bilangan bulat.
try (PreparedStatement preparedStatement = con.prepareStatement("insert into table values (?)")) {
preparedStatement.setInt (1, 1);
preparedStatement.execute();
}
Untuk membaca nilai dari tabel, masing-masing getter dapat digunakan. Misalnya, getInt()
metode atau getString()
dapat digunakan jika nilai yang berasal dari server diketahui:
try (SQLServerResultSet resultSet = (SQLServerResultSet) stmt.executeQuery("select * from sampleTable ")) {
resultSet.next();
resultSet.getInt(1); //or rs.getString(1); or rs.getObject(1);
}
Menggunakan prosedur tersimpan dengan sql_variant
Memiliki prosedur tersimpan seperti:
String sql = "CREATE PROCEDURE " + inputProc + " @p0 sql_variant OUTPUT AS SELECT TOP 1 @p0=col1 FROM sampleTable ";
Parameter output harus didaftarkan:
try (CallableStatement callableStatement = con.prepareCall(" {call " + inputProc + " (?) }")) {
callableStatement.registerOutParameter(1, microsoft.sql.Types.SQL_VARIANT);
callableStatement.execute();
}
Batasan sql_variant
Saat menggunakan TVP untuk mengisi tabel dengan nilai yang
datetime
//smalldatetime
date
disimpan dalam sql_variant, panggilangetDate()
getDateTime()
/getSmallDateTime()
/pada ResultSet tidak berfungsi dan melemparkan pengecualian berikut:Java.lang.String cannot be cast to java.sql.Timestamp
Solusi sementara: gunakan
getString()
ataugetObject()
sebagai gantinya.Menggunakan TVP untuk mengisi tabel dan mengirim nilai null dalam sql_variant tidak didukung. Mencoba melakukan itu menghasilkan pengecualian:
Inserting null value with column type sql_variant in TVP is not supported.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk