Memanggil Fungsi SQL Server

Tersedia

Pernyataan yang Dapat Dipanggil

JDBC memiliki antarmuka lain untuk skenario yang lebih kompleks. Itu mewarisi dari PreparedStatement dan disebut CallableStatement .

Digunakan untuk memanggil (Call) stored procedure dalam database. Keunikan dari panggilan tersebut adalah bahwa, selain hasil ResultSet , parameter juga dapat diteruskan ke prosedur tersimpan tersebut.

Apa yang baru, Anda bertanya? PreparedStatement juga memiliki hasil ResultSet dan Anda juga dapat meneruskan parameter ke sana. Ya, benar, tetapi kekhasan prosedur tersimpan adalah melalui parameter mereka tidak hanya dapat menerima, tetapi juga mengembalikan data.

Prosedur tersimpan dipanggil dengan parameter IN , OUT , dan INOUT . Ia mengembalikan satu atau lebih objek ResultSet . Metode Connection.prepareCall() digunakan untuk membuat objek CallableStatement .

Di sini bayangkan Anda memiliki prosedur tersimpan ADD yang menerima parameter a, b dan c. Prosedur ini menjumlahkan a dan b dan menempatkan hasil penjumlahan pada variabel c.

Mari tulis kode di mana kita akan mencoba menyebutnya:

// Connect to the server
Connection connection = DriverManager.getConnection("jdbc:as400://mySystem");

// Create a CallableStatement object. It does preprocessing
// calling a stored procedure. Question marks
// indicate where the input parameters should be substituted, and where the output ones
// The first two parameters are input,
// and the third one is a day off.
CallableStatement statement = connection.prepareCall("CALL MYLIBRARY.ADD (?, ?, ?)");

// Setting up input parameters. Passing 123 and 234 to the procedure
statement.setInt (1, 123);
statement.setInt (2, 234);

// Registering the output parameter type
statement.registerOutParameter (3, Types.INTEGER);

// Run stored procedure
statement.execute();

// Get the value of the output parameter
int sum = statement.getInt(3);

// Close CallableStatement and Connection
statement.close();
connection.close();

Bekerja hampir seperti dengan PreparedStatement , hanya saja ada nuansanya. Fungsi ADD kami mengembalikan hasil penambahan di parameter ketiga. Hanya objek CallableStatement yang tidak tahu apa-apa tentang ini. Oleh karena itu, kami memberi tahu dia secara eksplisit dengan memanggil metode registerOutParameter() :

registerOutParameter(parameter number, Parameter type)

Setelah itu, Anda dapat memanggil prosedur melalui metode execution() dan kemudian membaca data dari parameter ketiga menggunakan metode getInt() .

Permintaan Berkelompok

Dalam proyek nyata, situasi sering muncul ketika Anda perlu membuat banyak jenis kueri yang sama (yang paling umum dalam hal ini adalah PreparedStatement ), misalnya, Anda perlu memasukkan beberapa puluh atau ratusan catatan.

Jika Anda menjalankan setiap permintaan secara terpisah, itu akan memakan banyak waktu dan mengurangi kinerja aplikasi. Untuk mencegahnya, Anda dapat menggunakan mode penyisipan batch. Itu terletak pada fakta bahwa Anda mengumpulkan beberapa buffer dengan permintaan Anda, dan kemudian segera mengeksekusinya.

Berikut adalah potongan kode sebagai contoh:

PreparedStatement stmt = con.prepareStatement(
        	"INSERT INTO jc_contact (first_name, last_name, phone, email) VALUES (?, ?, ?, ?)");

for (int i = 0; i < 10; i++) {
	// Fill in the request parameters
	stmt.setString(1, "FirstName_" + i);
    stmt.setString(2, "LastNAme_" + i);
    stmt.setString(3, "phone_" + i);
    stmt.setString(4, "email_" + i);
	// The request is not executed, but fits into the buffer,
	// which is then executed immediately for all commands
	stmt.addBatch();
}
// Execute all requests at once
int[] results = stmt.executeBatch();

Alih-alih mengeksekusi kueri dengan metode execution() , kami mengelompokkannya dengan metode addBatch() .

Dan kemudian, ketika ada beberapa ratus permintaan, Anda dapat mengirim semuanya sekaligus ke server dengan memanggil perintah executionBatch() .

Sehat. Metode executionBatch() mengembalikan array bilangan bulat — int[]. Setiap sel dalam larik ini berisi angka yang menunjukkan jumlah baris yang diubah oleh kueri terkait. Jika permintaan nomor 3 dalam batch mengubah 5 baris, maka sel ke-3 dari array akan berisi nomor 5.

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar