Menangani pernyataan kompleks
Saat Anda menggunakan Microsoft JDBC Driver untuk SQL Server, Anda mungkin harus menangani pernyataan kompleks, termasuk pernyataan yang dihasilkan secara dinamis pada runtime. Pernyataan kompleks sering melakukan berbagai jenis tugas, termasuk pembaruan, penyisipan, dan penghapusan. Jenis pernyataan ini juga dapat mengembalikan beberapa kumpulan hasil dan parameter output. Dalam situasi ini, kode Java yang menjalankan pernyataan mungkin tidak tahu terlebih dahulu jenis dan jumlah objek dan data yang dikembalikan.
Untuk memproses pernyataan kompleks, driver JDBC menyediakan banyak metode untuk mengkueri objek dan data yang dikembalikan sehingga aplikasi Anda dapat memprosesnya dengan benar. Kunci untuk memproses pernyataan kompleks adalah metode eksekusi kelas SQLServerStatement . Metode ini mengembalikan nilai boolean . Ketika nilainya benar, hasil pertama yang dikembalikan dari pernyataan adalah kumpulan hasil. Jika nilai salah, hasil pertama yang dikembalikan adalah jumlah pembaruan.
Saat Anda mengetahui jenis objek atau data yang dikembalikan, Anda dapat menggunakan metode getResultSet atau getUpdateCount untuk memproses data tersebut. Untuk melanjutkan ke objek atau data berikutnya yang dikembalikan dari pernyataan kompleks, Anda dapat memanggil metode getMoreResults .
Dalam contoh berikut, koneksi terbuka ke database sampel AdventureWorks2022 diteruskan ke fungsi, pernyataan kompleks dibangun yang menggabungkan panggilan prosedur tersimpan dengan pernyataan SQL, pernyataan dijalankan, dan kemudian perulangan do
digunakan untuk memproses semua kumpulan hasil dan jumlah yang diperbarui yang dikembalikan.
public static void executeComplexStatement(Connection con) {
try (Statement stmt = con.createStatement();) {
String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)}; SELECT TOP 10 * FROM Person.Contact";
boolean results = stmt.execute(sqlStringWithUnknownResults);
int count = 0;
do {
if (results) {
ResultSet rs = stmt.getResultSet();
System.out.println("Result set data displayed here.");
}
else {
count = stmt.getUpdateCount();
if (count >= 0) {
System.out.println("DDL or update data displayed here.");
}
else {
System.out.println("No more results to process.");
}
}
results = stmt.getMoreResults();
}
while (results || count != -1);
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}