Menggunakan jenis data dasar
Driver Microsoft JDBC untuk SQL Server menggunakan jenis data dasar JDBC untuk mengonversi jenis data SQL Server ke format yang dipahami oleh bahasa pemrograman Java, dan sebaliknya. Driver JDBC menyediakan dukungan untuk API JDBC 4.0, yang mencakup jenis data SQLXML , dan jenis data Nasional (Unicode), seperti NCHAR, NVARCHAR, LONGNVARCHAR, dan NCLOB.
Pemetaan jenis data
Tabel berikut mencantumkan pemetaan default antara jenis data bahasa pemrograman SQL Server, JDBC, dan Java dasar:
Jenis SQL Server | Jenis JDBC (java.sql.Type) | Jenis Bahasa Java |
---|---|---|
bigint | BIGINT | long |
biner | BINER | byte[] |
bit | BIT | Boolean |
char | CHAR | String |
date | TANGGAL | java.sql.Date |
tanggalwaktu3 | TANDA WAKTU | java.sql.Timestamp |
tanggalwaktu2 | TANDA WAKTU | java.sql.Timestamp |
datetimeoffset2 | microsoft.sql.Type.DATETIMEOFFSET | microsoft.sql.DateTimeOffset |
desimal | DECIMAL | java.math.BigDecimal |
float | DOUBLE | ganda |
gambar | LONGVARBINARY | byte[] |
int | INTEGER | int |
money | DECIMAL | java.math.BigDecimal |
nchar | CHAR NCHAR (Java SE 6.0) |
String |
ntext | LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
String |
numeric | NUMERIK | java.math.BigDecimal |
nvarchar | VARCHAR NVARCHAR (Java SE 6.0) |
String |
nvarchar(maks) | VARCHAR NVARCHAR (Java SE 6.0) |
String |
real | REAL | float |
smalldatetime | TANDA WAKTU | java.sql.Timestamp |
smallint | SMALLINT | pendek |
smallmoney | DECIMAL | java.math.BigDecimal |
text | LONGVARCHAR | String |
waktu | WAKTU1 | java.sql.Time1 |
rentang waktu | BINER | byte[] |
tinyint | TINYINT | pendek |
udt | VARBINARY | byte[] |
uniqueidentifier | CHAR | String |
varbinary | VARBINARY | byte[] |
varbinary(max) | VARBINARY | byte[] |
varchar | VARCHAR | String |
varchar(max) | VARCHAR | String |
xml | LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
String SQLXML |
sqlvariant | microsoft.sql.Types.SQL_VARIANT | Objek |
geometry | VARBINARY | byte[] |
geografi | VARBINARY | byte[] |
1 Untuk menggunakan java.sql.Time dengan waktu jenis SQL Server, Anda harus mengatur properti koneksi sendTimeAsDatetime ke false.
2 Anda dapat mengakses nilai datetimeoffset secara terprogram dengan Kelas DateTimeOffset.
3 nilai java.sql.Timestamp tidak dapat lagi digunakan untuk membandingkan nilai dari kolom tanggalwaktu mulai dari SQL Server 2016. Batasan ini disebabkan oleh perubahan sisi server yang mengonversi tanggalwaktu ke datetime2 secara berbeda, menghasilkan nilai yang tidak sama. Solusi untuk masalah ini adalah mengubah kolom tanggalwaktu menjadi datetime2(3), menggunakan String alih-alih java.sql.Timestamp, atau mengubah tingkat kompatibilitas database menjadi 120 atau lebih rendah.
Bagian berikut memberikan contoh bagaimana Anda dapat menggunakan Driver JDBC dan jenis data dasar. Untuk contoh lebih rinci tentang cara menggunakan jenis data dasar dalam aplikasi Java, lihat Sampel Jenis Data Dasar.
Mengambil data sebagai string
Jika Anda harus mengambil data dari sumber data yang memetakan ke salah satu jenis data dasar JDBC untuk ditampilkan sebagai string, atau jika data yang diketik dengan kuat tidak diperlukan, gunakan metode getString kelas SQLServerResultSet . Contoh berikut menunjukkan penggunaan ini:
try(Statement stmt = con.createStatement();) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getString("job_id");
}
Mengambil data menurut jenis data
Jika Anda harus mengambil data dari sumber data, dan Anda tahu jenis data yang sedang diambil, gunakan salah satu metode get<Type> dari kelas SQLServerResultSet, yang juga dikenal sebagai metode getter. Anda bisa menggunakan nama kolom atau indeks kolom dengan metode dapatkan<Tipe> , seperti dalam contoh berikut:
try(Statement stmt = con.createStatement();) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
}
Catatan
GetUnicodeStream dan getBigDecimal dengan metode skala tidak digunakan lagi dan tidak didukung oleh driver JDBC.
Memperbarui data menurut jenis data
Jika Anda harus memperbarui nilai bidang di sumber data, gunakan salah satu metode Jenis> pembaruan<kelas SQLServerResultSet. Dalam contoh berikut, metode updateInt digunakan dengan metode updateRow untuk memperbarui data di sumber data:
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
int empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
}
Catatan
Driver JDBC tidak dapat memperbarui kolom SQL Server dengan nama kolom yang panjangnya lebih dari 127 karakter. Jika pembaruan ke kolom yang namanya lebih dari 127 karakter dicoba, pengecualian akan dilemparkan.
Memperbarui data menurut kueri berparameter
Jika Anda memperbarui data di sumber data dengan menggunakan kueri berparameter, Anda dapat mengatur jenis data parameter dengan menggunakan salah satu metode Jenis> yang ditetapkan<dari kelas SQLServerPreparedStatement. Metode ini juga dikenal sebagai metode setter. Dalam contoh berikut, metode prepareStatement digunakan untuk melakukan prakompeksi kueri berparameter lalu metode setString digunakan untuk mengatur nilai string parameter sebelum metode executeUpdate dipanggil.
try(PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET fname = ? WHERE (lname = 'Brown')");) {
String name = "Bob";
pstmt.setString(1, name);
int rowCount = pstmt.executeUpdate();
}
Untuk informasi selengkapnya tentang kueri berparameter, lihat Menggunakan pernyataan SQL dengan parameter.
Meneruskan parameter ke prosedur tersimpan
Jika Anda harus meneruskan parameter yang diketik ke dalam prosedur tersimpan, Anda dapat mengatur parameter menurut indeks atau nama dengan menggunakan salah satu metode Jenis> yang ditetapkan<dari kelas SQLServerCallableStatement. Dalam contoh berikut, metode prepareCall digunakan untuk menyiapkan panggilan ke prosedur tersimpan, lalu metode setString digunakan untuk mengatur parameter untuk panggilan sebelum metode executeQuery dipanggil.
try(CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");) {
String lname = "Brown";
cstmt.setString(1, lname);
ResultSet rs = cstmt.executeQuery();
}
Catatan
Dalam contoh ini, tataan hasil dikembalikan dengan hasil menjalankan prosedur tersimpan.
BigDecimal
Saat menggunakan nilai parameter BigDecimal, presisi dan skala dapat diteruskan bersama dengan nilai melalui setBigDecimal
. Menggunakan setBigDecimal
cara ini menghindari potensi pemotongan nilai. Atau, jika opsi calcBigDecimalPrecision
string koneksi diatur ke true
, driver akan menghitung presisi untuk input BigDecimal atas nama pengguna, dengan biaya performa. Jika nilai diteruskan sendiri, tanpa calcBigDecimalPrecision
diatur, atau opsi diatur ke false
, driver mengasumsikan nilai maksimum yang diizinkan (38) untuk presisi untuk nilai BigDecimal tersebut.
Untuk informasi selengkapnya tentang menggunakan driver JDBC dengan prosedur tersimpan dan parameter input, lihat Menggunakan prosedur tersimpan dengan parameter input.
Mengambil parameter dari prosedur tersimpan
Jika Anda harus mengambil parameter kembali dari prosedur tersimpan, Anda harus terlebih dahulu mendaftarkan out
parameter berdasarkan nama atau indeks dengan menggunakan metode registerOutParameter dari kelas SQLServerCallableStatement. Kemudian tetapkan parameter yang dikembalikan ke variabel yang sesuai setelah Anda menjalankan panggilan ke prosedur tersimpan. Dalam contoh berikut, metode prepareCall digunakan untuk menyiapkan panggilan ke prosedur tersimpan, metode registerOutParameter digunakan untuk menyiapkan out
parameter, lalu metode setString digunakan untuk mengatur parameter untuk panggilan sebelum metode executeQuery dipanggil. Nilai out
parameter prosedur tersimpan diambil dengan menggunakan metode getShort .
try(CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");) {
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
ResultSet rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
}
Catatan
Selain parameter yang dikembalikan, kumpulan hasil juga dapat dikembalikan dengan hasil menjalankan prosedur tersimpan.
Untuk informasi selengkapnya tentang cara menggunakan driver JDBC dengan prosedur tersimpan dan parameter output, lihat Menggunakan prosedur tersimpan dengan parameter output.
Baca 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