Middle
Čo sú uložené procedúry a ako ich možno volať cez JDBC?
sobes.tech AI
Odpoveď od AI
Uložené procedúry sú súbor SQL inštrukcií, ktoré sú skompilované a uložené v databáze. Sú vykonávané ako celok a môžu prijímať parametre, vracať hodnoty. Umožňujú enkapsuláciu podnikovej logiky, zlepšujú výkon a bezpečnosť.
Na volanie uložených procedúr cez JDBC sa používa rozhranie CallableStatement.
import java.sql.*;
public class StoredProcedureExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase"; // URL vašej DB
String user = "myuser";
String password = "mypassword";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// Volanie bez parametrov
String sqlNoParams = "{CALL my_procedure_no_params()}";
try (CallableStatement stmtNoParams = conn.prepareCall(sqlNoParams)) {
stmtNoParams.execute();
System.out.println("Procedúra bez parametrov bola vykonaná.");
}
// Volanie s vstupným parametrom
String sqlWithInParams = "{CALL my_procedure_with_in(?, ?)}";
try (CallableStatement stmtWithInParams = conn.prepareCall(sqlWithInParams)) {
stmtWithInParams.setString(1, "Hodnota1"); // Nastavenie prvého IN parametra
stmtWithInParams.setInt(2, 42); // Nastavenie druhého IN parametra
stmtWithInParams.execute();
System.out.println("Procedúra s vstupnými parametrami bola vykonaná.");
}
// Volanie s výstupným parametrom
String sqlWithInOutParams = "{CALL my_procedure_with_out(?, ?)}";
try (CallableStatement stmtWithInOutParams = conn.prepareCall(sqlWithInOutParams)) {
stmtWithInOutParams.setInt(1, 123); // Nastavenie IN parametra
stmtWithInOutParams.registerOutParameter(2, Types.VARCHAR); // Registrácia OUT parametra
stmtWithInOutParams.execute();
String outValue = stmtWithInOutParams.getString(2);
System.out.println("Procedúra s výstupným parametrom bola vykonaná. Výstupná hodnota: " + outValue);
}
// Volanie s ResultSet
String sqlWithResultSet = "{CALL my_procedure_return_rs()}";
try (CallableStatement stmtWithResultSet = conn.prepareCall(sqlWithResultSet)) {
boolean hasResultSet = stmtWithResultSet.execute();
if (hasResultSet) {
try (ResultSet rs = stmtWithResultSet.getResultSet()) {
while (rs.next()) {
// Spracovanie dát z ResultSet
System.out.println("ID: " + rs.getInt("id") + ", Meno: " + rs.getString("name"));
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Hlavné kroky:
- Získať spojenie s databázou (
Connection). - Vytvoriť objekt
CallableStatementpomocouconnection.prepareCall(). Riadok volania by mal byť vo formáte{CALL názov_procedúry(...)}. - Ak procedúra má vstupné parametre (
INOUTaleboIN), nastaviť ich hodnoty pomocou metódsetXyz(). Číslo parametra začína od 1. - Ak procedúra má výstupné parametre (
OUTaleboINOUT), je potrebné ich predvolene zaregistrovať s určením typu dát pomocouregisterOutParameter(int parameterIndex, int sqlType). - Spustiť volanie uložené procedúry pomocou
execute()aleboexecuteQuery()(ak procedúra vraciaResultSet). - Pre výstupné parametre získať hodnoty pomocou
getXyz(). - Spracovať
ResultSet, ak ho procedúra vracia. - Zatvoriť
CallableStatement,ResultSetaConnection. Odporúča sa použiťtry-with-resources.
Použitie CallableStatement umožňuje pracovať s rôznymi typmi parametrov uložených procedúr, vrátane polí, štruktúr a objektov špecifických databázových typov.