JavaRush /Kurslar /All lectures for AZ purposes /SQL Server Funksiyalarının Çağırılması

SQL Server Funksiyalarının Çağırılması

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

CallableStatement

JDBC-də daha mürəkkəb ssenariləri icra etmək üçün başqa bir interfeys var. O, PreparedStatement-dən irsən alınır və CallableStatement adlanır.

Bu, bazada saxlanılan prosedurların çağırılması üçün istifadə olunur. Belə bir çağırışın özəlliyi odur ki, ResultSet nəticəsindən əlavə həmin prosedura parametrləri də ötürmək mümkündür.

Niyə bu yenidir, soruşa bilərsən? PreparedStatement da ResultSet nəticəsinə malikdir və ona parametrlər ötürmək mümkündür. Bəli, düz deyirsən, amma saxlanılan prosedurların özəlliyi odur ki, parametrlər vasitəsilə həm almaq, həm də məlumatı geri qaytarmaq mümkündür.

Saxlanılan prosedur IN, OUTINOUT parametrləri ilə çağırılır. O, bir və ya bir neçə ResultSet obyektini qaytarır. CallableStatement obyektinin yaradılması üçün Connection.prepareCall() metodu nəzərdə tutulub.

Təsəvvür elə, sənin ADD adlı bir saxlanılan prosedurun var, o a, b və c parametrlərini qəbul edir. Bu prosedur a və b-nin cəmini hesablayır və nəticəni c dəyişəninə yerləşdirir.

Gəlin onu necə çağıracağımızı göstərən kod yazaq:


 	// Serverə qoşulma
 	Connection connection = DriverManager.getConnection("jdbc:as400://mySystem");
 
 	// CallableStatement obyektinin yaradılması. O, saxlanılan prosedurun ilkin emalını aparır.
 	// Sual işarələri hansı yerlərə giriş parametrlərinin,
 	// hansı yerlərə çıxış parametrlərinin qoyulacağını göstərir.
 	// İlk iki parametr girişdir,
 	// üçüncüsü isə çıxışdır.
 	CallableStatement statement = connection.prepareCall("CALL MYLIBRARY.ADD (?, ?, ?)");
 
 	// Giriş parametrlərinin konfiqurasiyası. Prosedura 123 və 234 verilir
 	statement.setInt (1, 123);
 	statement.setInt (2, 234);
 
 	// Çıxış parametrinin tipinin qeydiyyatı
 	statement.registerOutParameter (3, Types.INTEGER);
 
 	// Saxlanılan prosedurun işə salınması
 	statement.execute();
 
 	// Çıxış parametrinin dəyərinin alınması
 	int sum = statement.getInt(3);
 
 	// CallableStatement və Connection-un bağlanması
 	statement.close();
 	connection.close();

PreparedStatement ilə demək olar ki, eyni cür işləyir, amma bir fərq var. Bizim ADD funksiyamız üçüncü parametrdə cəmi qaytarır. CallableStatement obyekti bunun fərqində deyil. Buna görə də, biz ona bunu aydın şəkildə bildiririk, registerOutParameter() metodunu çağıraraq:


registerOutParameter(parametrNömrəsi, parametrTipi)

Bundan sonra proseduru execute() metodu ilə işə salmaq və üçüncü parametrdən getInt() metodu ilə məlumatları oxumaq mümkündür.

Sorğuların toplu icrası

Reallıqda layihələrdə tez-tez bir çox eyni tip sorğular etmək lazım gəlir (əksər hallarda PreparedStatement ilə rast gəlinir), misal üçün, bir neçə onlarla və ya yüzlərlə qeydi daxil etmək lazım olur.

Hər bir sorğunu ayrı-ayrılıqda icra etsən, bu çox vaxt alar və tətbiqin performansını azaldar. Bunu etməkdən qaçmaq üçün batch-modu istifadəyə etmək olar. Bu, sorğuları bir tamponda yığmaq və sonra hamısını birdən-birə icra etməkdən ibarətdir.

Məsələn, kod parçacığı təqdim edim:


PreparedStatement stmt = con.prepareStatement(
        	"INSERT INTO jc_contact (first_name, last_name, phone, email) VALUES (?, ?, ?, ?)");
 
for (int i = 0; i < 10; i++) {
	// Sorğunun parametrlərini doldururuq
	stmt.setString(1, "FirstName_" + i);
    stmt.setString(2, "LastNAme_" + i);
    stmt.setString(3, "phone_" + i);
    stmt.setString(4, "email_" + i);
	// Sorğu icra olunmur, əldə saxlanır və
	// sonra bütün komandalar üçün bir anda icra olunur
	stmt.addBatch();
}
// Bütün sorğuları birdən icra edirik
int[] results = stmt.executeBatch();

Sorğunu execute() metodu ilə icra etmək yerinə, onu addBatch() metodu ilə paketa yığırıq.

Daha sonra, yüzlərlə sorğu toplandıqda, onları birdən serverə göndərmək olar, executeBatch() komandasını çağıraraq.

Faydalıdır. executeBatch() metodu bütöv rəqəmlərdən ibarət bir massiv int[] qaytarır. Bu massivdəki hər hüceyrə müvafiq sorğu tərəfindən dəyişdirilən sətir sayını göstərir. Əgər batch-dəki 3-cü sorğu 5 sətir dəyişdiribsə, massivdəki 3-cü hüceyrədə 5 rəqəmi olacaq.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION