CodeGym /Kursus Java /All lectures for MS purposes /Memanggil Fungsi Pelayan SQL

Memanggil Fungsi Pelayan SQL

All lectures for MS purposes
Tahap , pelajaran
Tersedia

CallableStatement

JDBC mempunyai antara muka lain untuk senario yang lebih kompleks. Ia mewarisi daripada PreparedStatement dan dipanggil CallableStatement .

Ia digunakan untuk memanggil (Panggil) prosedur tersimpan dalam pangkalan data. Keistimewaan panggilan sedemikian ialah, sebagai tambahan kepada keputusan ResultSet , parameter juga boleh dihantar kepada prosedur tersimpan sedemikian.

Apa yang baru, anda bertanya? PreparedStatement juga mempunyai hasil ResultSet dan anda juga boleh menghantar parameter kepadanya. Ya, betul, tetapi keanehan prosedur tersimpan ialah melalui parameter mereka bukan sahaja boleh menerima, tetapi juga mengembalikan data.

Prosedur yang disimpan dipanggil dengan parameter IN , OUT , dan INOUT . Ia mengembalikan satu atau lebih objek ResultSet . Kaedah Connection.prepareCall() digunakan untuk mencipta objek CallableStatement .

Di sini bayangkan anda mempunyai prosedur tersimpan ADD yang menerima parameter a, b dan c. Prosedur ini menambah a dan b dan meletakkan hasil penambahan dalam pembolehubah c.

Mari tulis kod di mana kita akan cuba memanggilnya:

// 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();

Kerja hampir seperti dengan PreparedStatement , cuma ada nuansa. Fungsi ADD kami mengembalikan hasil penambahan dalam parameter ketiga. Hanya objek CallableStatement tidak tahu apa-apa tentang perkara ini. Oleh itu, kami memberitahunya secara eksplisit dengan memanggil kaedah registerOutParameter() :

registerOutParameter(parameter number, Parameter type)

Selepas itu, anda boleh memanggil prosedur melalui kaedah execute() dan kemudian membaca data daripada parameter ketiga menggunakan kaedah getInt() .

Permintaan Batching

Dalam projek sebenar, situasi sering timbul apabila anda perlu membuat banyak jenis pertanyaan yang sama (yang paling biasa dalam kes ini ialah PreparedStatement ), sebagai contoh, anda perlu memasukkan beberapa puluh atau ratusan rekod.

Jika anda melaksanakan setiap permintaan secara berasingan, ia akan mengambil banyak masa dan mengurangkan prestasi aplikasi. Untuk mengelakkan ini, anda boleh menggunakan mod sisipan kelompok. Ia terletak pada hakikat bahawa anda mengumpul beberapa penimbal dengan permintaan anda, dan kemudian melaksanakannya dengan segera.

Berikut adalah sekeping kod 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();

Daripada melaksanakan pertanyaan dengan kaedah execute() , kami mengumpulkannya dengan kaedah addBatch() .

Dan kemudian, apabila terdapat beberapa ratus permintaan, anda boleh menghantar semuanya sekaligus ke pelayan dengan memanggil perintah executeBatch() .

Sihat. Kaedah executeBatch() mengembalikan tatasusunan integer — int[]. Setiap sel dalam tatasusunan ini mengandungi nombor yang menunjukkan bilangan baris yang diubah suai oleh pertanyaan yang sepadan. Jika permintaan nombor 3 dalam kelompok menukar 5 baris, maka sel ke-3 tatasusunan akan mengandungi nombor 5.

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION