Menggunakan jenis data dasar

Unduh driver JDBC

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

Memahami jenis data driver JDBC