This example shows how to access a database and then create a procedure with input and output parameters.
import java.sql.*;
import java.util.Properties;
public class CallableStatementExample2 {
public static void main(java.lang.String[] args) {
// Register the Native JDBC driver. If we cannot
// register the driver, the test cannot continue.
try {
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
// Create the connection properties
Properties properties = new Properties ();
properties.put ("user", "userid");
properties.put ("password", "password");
// Connect to the local iSeries database
Connection c = DriverManager.getConnection("jdbc:db2://*local", properties);
Statement s = c.createStatement();
// Create a procedure with in, out, and in/out parameters.
String sql = "CREATE PROCEDURE MYLIBRARY.SQLSPEX2 " +
"(IN P1 INTEGER, OUT P2 INTEGER, INOUT P3 INTEGER) " +
"LANGUAGE SQL SPECIFIC MYLIBRARY.SQLSPEX2 " +
"EX2: BEGIN " +
" SET P2 = P1 + 1; " +
" SET P3 = P3 + 1; " +
"END EX2 ";
try {
s.executeUpdate(sql);
} catch (SQLException e) {
// NOTE: We are ignoring the error here. We are making
// the assumption that the only reason this fails
// is because the procedure already exists. Other
// reasons that it could fail are because the C compiler
// is not found to compile the procedure or because
// collection MYLIBRARY does not exist on the system.
}
s.close();
// Prepare a callable statement used to run the procedure.
CallableStatement cs = c.prepareCall("CALL MYLIBRARY.SQLSPEX2(?, ?, ?)");
// All input parameters must be set and all output parameters must
// be registered. Notice that this means we have two calls to make
// for an input output parameter.
cs.setInt(1, 5);
cs.setInt(3, 10);
cs.registerOutParameter(2, Types.INTEGER);
cs.registerOutParameter(3, Types.INTEGER);
// Run the procedure
cs.executeUpdate();
// Verify the output parameters have the desired values.
System.out.println("The value of P2 should be P1 (5) + 1 = 6. --> " + cs.getInt(2));
System.out.println("The value of P3 should be P3 (10) + 1 = 11. --> " + cs.getInt(3));
cs.close(); // close the CallableStatement object
c.close(); // close the Connection object.
} catch (Exception e) {
System.out.println("Something failed..");
System.out.println("Reason: " + e.getMessage());
e.printStackTrace();
}
}
}