Przejdź do głównej zawartości

Stored Procedures - JDBC Java SQL

Stored Procedures:

  • group of SQL statements that perform a particular task 
  • Normally created by DBA
  • Can have any combination of input, output, and input/output parameters
Benefits:

To call stored procedure from Java

The JDBC API provides the CallableStatement

CallableStatement myCall = myConn.prepareCall("{call some_stored_procedure()}");
...
myCall.execute();

JDBC API parameter types
  • IN default
  • INOUT
  • OUT
Stored Procedure can return result sets


EXAMPLE: Created stored procedure on MySQL side - NAME: increase_salaries_for_department

DELIMITER $$
DROP PROCEDURE IF EXISTS `increase_salaries_for_department`$$

CREATE DEFINER=`student`@`localhost` PROCEDURE `increase_salaries_for_department`
(IN the_department VARCHAR(64), IN increase_amount DECIMAL(10,2))

BEGIN

UPDATE employees SET salary= salary + increase_amount where department=the_department;

END$$
DELIMITER ;

Java side:

                        // Get a connection to database
myConn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/newdb?autoReconnect=true&useSSL=false", "root", "Sasanka01");
                        // Values for parameters
String theDepartment = "Engineering";
int theIncreaseAmount = 10000;
// Show salaries BEFORE
System.out.println("Salaries BEFORE\n");
showSalaries(myConn, theDepartment);

// Prepare the stored procedure call
myStmt = myConn
.prepareCall("{call increase_salaries_for_department(?, ?)}");

// Set the parameters
myStmt.setString(1, theDepartment);
myStmt.setDouble(2, theIncreaseAmount);

// Call stored procedure
System.out.println("\n\nCalling stored procedure.  increase_salaries_for_department('" + theDepartment + "', " + theIncreaseAmount + ")");
                        //Execute statement
                        myStmt.execute();
System.out.println("Finished calling stored procedure");

// Show salaries AFTER
System.out.println("\n\nSalaries AFTER\n");
showSalaries(myConn, theDepartment);


INOUT parameters

Stored procedure developed for MySQL

PROCEDURE 'greet_the_department' ( INOUT department VARCHAR(64) )
BEGIN
     SET department = concat ('Hello to awesome ', department, 'team!' );
END

Java Coding

 // Prepare the stored procedure call
 myStmt = myConn.prepareCall("{call greet_the_department(?)}");

// Set the parameters
myStmt.registerOutParameter(1, Types.VARCHAR);
myStmt.setString(1, theDepartment);

// Call stored procedure
System.out.println("Calling stored procedure.  greet_the_department('" + theDepartment + "')");
myStmt.execute();
System.out.println("Finished calling stored procedure");
// Get the value of the INOUT parameter
String theResult = myStmt.getString(1);
System.out.println("\nThe result = " + theResult);

OUT Parameters
Stored procedure developed for MySQL

PROCEDURE `get_count_for_department`(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
SELECT COUNT(*) INTO the_count FROM employees where department=the_department;

END;

Java Coding

 // Prepare the stored procedure call
 myStmt = myConn.prepareCall("{call get_count_for_department(?, ?)}");

// Set the parameters
myStmt.setString(1, "Engineering);
myStmt.registerOutParameter(2, Types.INTEGER);

//Call stored procedure
myStmt = execute();

//Get the value of the OUT parameter
int theCount = myStmt.getInt(2)

Komentarze

Popularne posty z tego bloga

Skrócony zapis if - instrukcja warunkowa java

Instrukcja warunkowa - warunek i rezultat. if (warunek) { jesli spełniony wykonań operacje i zwróć wynik; } warunek nie spełniony Możliwości skrócenia kodu instrukcji warunkowej if (i < 0) ? i-- : i++; Jeżeli i mniejsze od zera to i-- jezeli false to i++ if (i < 0) {     i--; } else {     i++; } Skrócony zapis instrukcji warunkowej else if (i < 0) ? i--;  inna_zmienna=4; : i++; if (i < 0) {     i--; } else {     i++;     inna_zmienna = 4; } Skrócony zapis if

String-1 > endsLy

Given a string, return true if it ends in "ly". endsLy("oddly") → true endsLy("y") → false endsLy("oddy") → false public boolean endsLy ( String str ) { if ( str . length ()< 2 ){ return false ; } if (( str . substring ( str . length ()- 2 , str . length ())). equals ( "ly" )){ return true ; } return false ; }

String-1 > withouEnd2

Given a string, return a version without both the first and last char of the string. The string may be any length, including 0. withouEnd2("Hello") → "ell" withouEnd2("abc") → "b" withouEnd2("ab") → "" public String withouEnd2 ( String str ) { if ( str . length ()== 1 ){ return str . substring ( 1 ); } else if ( str . length ()== 0 ){ return str ; } return ( str . substring ( 1 , str . length ()- 1 )); }