Driver enhancement
The CallableStatement object provides a way to call or execute UDRs in a standard way for all database servers. Results from the execution of these UDRs are returned as a result set or as an OUT parameter.
The following is a program that creates a user-defined function, myudr, with
two OUT parameters and one IN parameter, and then executes the myudr()
function. The example requires server-side support for multiple OUT parameters; hence it
only works for , Version 9.4 or
above. For more information about UDRs, see HCL OneDB™ User-Defined
Routines and Data Types Developer's Guide and HCL® J/Foundation Developer's
Guide.
import java.sql.*; public class myudr { public myudr() { } public static void main(String args[]) { Connection myConn = null; try { myConn = DriverManager.getConnection( "jdbc:onedb://MYSYSTEM:18551/testDB;" +"user=USERID;" +"password=MYPASSWORD"); } catch (ClassNotFoundException e) { System.out.println( "problem with loading Ifx Driver\n" + e.getMessage()); } catch (SQLException e) { System.out.println( "problem with connecting to db\n" + e.getMessage()); } try { Statement stmt = myConn.createStatement(); stmt.execute("DROP FUNCTION myudr"); } catch (SQLException e){ } try { Statement stmt = myConn.createStatement(); stmt.execute( "CREATE FUNCTION myudr(OUT arg1 int, arg2 int, OUT arg3 int)" +" RETURNS boolean; LET arg1 = arg2; LET arg3 = arg2 * 2;" +"RETURN 't'; END FUNCTION;"); } catch (SQLException e) { System.out.println( "problem with creating function\n" + e.getMessage()); } Connection conn = myConn; try { String command = "{? = call myudr(?, ?, ?)}"; CallableStatement cstmt = conn.prepareCall (command); // Register arg1 OUT parameter cstmt.registerOutParameter(1, Types.INTEGER); // Pass in value for IN parameter cstmt.setInt(2, 4); // Register arg3 OUT parameter cstmt.registerOutParameter(3, Types.INTEGER); // Execute myudr ResultSet rs = cstmt.executeQuery(); // executeQuery returns values via a resultSet while (rs.next()) { // get value returned by myudr boolean b = rs.getBoolean(1); System.out.println("return value from myudr = " + b); } // Retrieve OUT parameters from myudr int i = cstmt.getInt(1); System.out.println("arg1 OUT parameter value = " + i); int k = cstmt.getInt(3); System.out.println("arg3 OUT parameter value = " + k); rs.close(); cstmt.close(); conn.close(); } catch (SQLException e) { System.out.println("SQLException: " + e.getMessage()); System.out.println("ErrorCode: " + e.getErrorCode()); e.printStackTrace(); } } } - - - $> java ... myudr return value from myudr = true arg1 OUT parameter value = 4 arg3 OUT parameter value = 8