CodeGym/Kurso sa Java/All lectures for TL purposes/Pagtawag sa Mga Function ng SQL Server

Pagtawag sa Mga Function ng SQL Server

Available

CallableStatement

Ang JDBC ay may isa pang interface para sa mas kumplikadong mga sitwasyon. Nagmana ito mula sa PreparedStatement at tinatawag na CallableStatement .

Ito ay ginagamit upang tumawag (Tawag) na nakaimbak na mga pamamaraan sa database. Ang kakaiba ng naturang tawag ay, bilang karagdagan sa resulta ng ResultSet , ang mga parameter ay maaari ding maipasa sa naturang nakaimbak na pamamaraan.

Ano ang bago, tanong mo? Ang PreparedStatement ay mayroon ding resulta ng ResultSet at maaari mo ring ipasa ang mga parameter dito. Oo, tama iyan, ngunit ang kakaiba ng mga naka-imbak na pamamaraan ay sa pamamagitan ng mga parameter na hindi lamang nila matatanggap, ngunit nagbabalik din ng data.

Ang nakaimbak na pamamaraan ay tinatawag na may mga parameter na IN , OUT , at INOUT . Nagbabalik ito ng isa o higit pang ResultSet object . Ang Connection.prepareCall() method ay ginagamit upang lumikha ng isang CallableStatement object .

Dito isipin na mayroon kang isang naka-imbak na pamamaraan ADD na tumatanggap ng mga parameter a, b at c. Ang pamamaraang ito ay nagdaragdag ng a at b at inilalagay ang resulta ng karagdagan sa variable c.

Isulat natin ang code kung saan susubukan nating tawagan ito:

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

Ang trabaho ay halos katulad ng sa PreparedStatement , mayroon lamang isang nuance. Ibinabalik ng aming ADD function ang resulta ng pagdaragdag sa ikatlong parameter. Tanging ang object ng CallableStatement ang walang alam tungkol dito. Samakatuwid, tahasan namin itong sinasabi sa kanya sa pamamagitan ng pagtawag sa registerOutParameter() na pamamaraan :

registerOutParameter(parameter number, Parameter type)

Pagkatapos nito, maaari mong tawagan ang procedure sa pamamagitan ng execute() method at pagkatapos ay basahin ang data mula sa ikatlong parameter gamit ang getInt() method .

Mga Batching Request

Sa mga totoong proyekto, madalas na lumitaw ang isang sitwasyon kapag kailangan mong gumawa ng maraming parehong uri ng mga query (ang pinakakaraniwan sa kasong ito ay PreparedStatement ), halimbawa, kailangan mong magpasok ng ilang sampu o daan-daang mga tala.

Kung isasagawa mo ang bawat kahilingan nang hiwalay, aabutin ito ng maraming oras at bawasan ang pagganap ng application. Upang maiwasan ito, maaari mong gamitin ang batch insert mode. Ito ay nakasalalay sa katotohanan na nag-iipon ka ng ilang buffer sa iyong mga kahilingan, at pagkatapos ay isagawa kaagad ang mga ito.

Narito ang isang piraso ng code bilang isang halimbawa:

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

Sa halip na isagawa ang query gamit ang execute() method , batch namin ito gamit ang addBatch() method .

At pagkatapos, kapag mayroong ilang daang mga kahilingan, maaari mong ipadala ang mga ito nang sabay-sabay sa server sa pamamagitan ng pagtawag sa executeBatch() command .

Malusog. Ang executeBatch() na pamamaraan ay nagbabalik ng hanay ng mga integer — int[]. Ang bawat cell sa array na ito ay naglalaman ng isang numero na nagpapahiwatig ng bilang ng mga row na binago ng kaukulang query. Kung binago ng kahilingan ang numero 3 sa batch ng 5 row, ang ika-3 cell ng array ay maglalaman ng numero 5.

Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito