CodeGym/Java-Kurse/All lectures for DE purposes/Aufrufen von SQL Server-Funktionen

Aufrufen von SQL Server-Funktionen

Verfügbar

CallableStatement

JDBC verfügt über eine weitere Schnittstelle für noch komplexere Szenarien. Es erbt von PreparedStatement und heißt CallableStatement .

Es wird verwendet, um gespeicherte Prozeduren in der Datenbank aufzurufen (aufzurufen). Die Besonderheit eines solchen Aufrufs besteht darin, dass neben dem ResultSet result auch Parameter an eine solche Stored Procedure übergeben werden können.

Was gibt es Neues, fragen Sie? PreparedStatement hat auch ein ResultSet- Ergebnis und Sie können ihm auch Parameter übergeben. Ja, das stimmt, aber die Besonderheit gespeicherter Prozeduren besteht darin, dass sie über Parameter nicht nur Daten empfangen, sondern auch zurückgeben können.

Die gespeicherte Prozedur wird mit den Parametern IN , OUT und INOUT aufgerufen . Es gibt ein oder mehrere ResultSet- Objekte zurück . Die Methode Connection.prepareCall() wird verwendet , um ein CallableStatement- Objekt zu erstellen .

Stellen Sie sich hier vor, Sie hätten eine gespeicherte Prozedur ADD, die die Parameter a, b und c akzeptiert. Diese Prozedur addiert a und b und platziert das Ergebnis der Addition in der Variablen c.

Schreiben wir den Code dort, wo wir versuchen, ihn aufzurufen:

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

Die Arbeit ist fast wie bei PreparedStatement , nur gibt es eine Nuance. Unsere ADD-Funktion gibt das Ergebnis der Addition im dritten Parameter zurück. Nur das CallableStatement- Objekt weiß davon nichts. Deshalb teilen wir ihm dies explizit mit, indem wir die Methode registerOutParameter() aufrufen :

registerOutParameter(parameter number, Parameter type)

Danach können Sie die Prozedur über die Methode „execute()“ aufrufen und dann die Daten aus dem dritten Parameter mit der Methode „getInt()“ lesen .

Batch-Anfragen

In realen Projekten kommt es häufig vor, dass Sie viele Abfragen desselben Typs durchführen müssen (am häufigsten ist in diesem Fall PreparedStatement ), Sie müssen beispielsweise mehrere Dutzend oder Hunderte von Datensätzen einfügen.

Wenn Sie jede Anfrage einzeln ausführen, nimmt dies viel Zeit in Anspruch und verringert die Leistung der Anwendung. Um dies zu verhindern, können Sie den Batch-Einfügungsmodus verwenden. Es liegt darin, dass Sie mit Ihren Anfragen etwas Puffer ansammeln und diese dann sofort ausführen.

Hier ist ein Codestück als Beispiel:

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

Anstatt die Abfrage mit der Methode „execute()“ auszuführen , stapeln wir sie mit der Methode „addBatch()“ .

Und wenn es dann mehrere Hundert Anfragen gibt, können Sie diese alle auf einmal an den Server senden, indem Sie den BefehlexecuteBatch() aufrufen .

Gesund. Die MethodeexecuteBatch () gibt ein Array von Ganzzahlen zurück – int[]. Jede Zelle in diesem Array enthält eine Zahl, die die Anzahl der Zeilen angibt, die durch die entsprechende Abfrage geändert wurden. Wenn die Anforderung Nummer 3 im Batch 5 Zeilen geändert hat, enthält die dritte Zelle des Arrays die Nummer 5.

Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare