8.Callable Statement
8.Callable Statement
1
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
Callable Statement
In Jdbc applications, to access stored procedures and functions defined at database from Java
application then we have to use CallableStatement object.
3
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
To represent CallableStatement object Jdbc API has provided the interface in the form of
java.sql. CallableStatement.
If we want to use CallableStatement object in Jdbc applications then we have to use the following
steps.
When JVM encounters the above instruction JVM will pick up procedure call and send to
Database Engine, where Database Engine will parse the procedure call and prepare a query
plan with the positional parameters, as a result CallableStatement object will be created at
Java application.
Note: In case of stored procedures and functions we are able to pass the parameters in the
following 3 ways.
4
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
1. IN Type Parameter:
This parameter will get the value from procedure call or function call and make available
to the procedure body or function body.
Step 2: If we have IN type parameters in CallableStatement object then set values to IN type
parameters.
Step 3: If we have OUT type parameter in CallableStatement object then we have to register OUT
type parameter with a particular datatype.
5
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
Where data_type may be the constants from Types class like BYTE, SHORT, INTEGER,
FLOAT and so on.
Step 4: Make Database Engine to pick up the values from Query plan and to execute the
respective procedure or function.
Ex: cst.execute();
Step 5: Get the values from OUT type parameters available in CallableStatement object.
After executing the respective procedure or function the respective values will be stored
in OUT type parameters in CallableStatement object from stored procedure or functions.
Toaccess the OUT type parameter values we have to use the following method.
JdbcApp35:
6
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
import java.sql.*;
public class JdbcApp35{
public static void main(String[] args) throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","manager");
CallableStatement cst=con.prepareCall("{call getSal(?,?)}");
cst.setInt(1,101);
cst.registerOutParameter(2, Types.FLOAT);
cst.execute();
System.out.println("Salary........."+cst.getFloat(2));
con.close();
}
}
JdbcApp36:
import java.sql.*;
7
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
JdbcApp37:
/*
create or replace procedure getEmps(sal IN number, emps OUT SYS_REFCURSOR)
AS
BEGIN
open emps for
select * from emp1 where esal<sal;
END getEmps;
/
*/
package com.durgasoft;
import java.io.FileInputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Properties;
import oracle.jdbc.internal.OracleTypes;
8
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
Connection con=DriverManager.getConnection(driver_url,p);
CallableStatement cst=con.prepareCall("{call getEmps(?,?)}");
cst.setFloat(1, 10000);
cst.registerOutParameter(2, OracleTypes.CURSOR);
cst.execute();
Object obj=cst.getObject(2);
ResultSet rs=(ResultSet)obj;
System.out.println("ENO\tENAME\tESAL\tEADDR");
System.out.println("-----------------------------");
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getFloat(3)+"\t"+rs.getString(4));
}
con.close();
}
db.properties
driver_class=oracle.jdbc.OracleDriver
driver_url=jdbc:oracle:thin:@localhost:1521:xe
user=system
password=durga
9
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
JdbcApp38:
/*
create or replace function getEmployees(no1 IN number,no2 IN number) return SYS_REFCURSOR
AS
employees SYS_REFCURSOR;
BEGIN
open employees for
select * from emp1 where eno>=no1 and eno<=no2;
return employees;
END getEmployees;
/
*/
package com.durgasoft;
import java.io.FileInputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Properties;
import oracle.jdbc.internal.OracleTypes;
10
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
Class.forName(driver_class);
Connection con=DriverManager.getConnection(driver_url, p);
CallableStatement cst=con.prepareCall("{?=call getEmployees(?,?)}");
cst.setInt(2, 111);
cst.setInt(3, 555);
cst.registerOutParameter(1, OracleTypes.CURSOR);
cst.execute();
ResultSet rs=(ResultSet)cst.getObject(1);
System.out.println("ENO\tENAME\tESAL\tEADDR");
System.out.println("------------------------");
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getFloat(3)+"\t"+rs.getString(4));
}
con.close();
}
}
db.properties
driver_class=oracle.jdbc.OracleDriver
driver_url=jdbc:oracle:thin:@localhost:1521:xe
user=system
password=durga
11
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGASOFT
12
nd
DURGASOFT, # 202,2 Floor,HUDAMaitrivanam,Ameerpet, Hyderabad - 500038, 040 – 64 51 27 86,
80 96 96 96 96, 9246212143 | www.durgasoft.com