Home >>Java JDBC Tutorial >JDBC Statements
JDBC Statements are basically an interface that is present in the Java language. This is known to deliver the methods that are used to execute the queries with the database. The statement interface in JDBC is basically a factory of ResultSet and in simple terms we can understand it as this delivers factory method in order to get the object of ResultSet. Whenever a connection is generally obtained then the user or the programmer can interact with the database.
The JDBC Statement, CallableStatement, and PreparedStatement interfaces are the ones that define the methods and the properties that generally enable the user or a programmer to send SQL or PL/SQL commands and receive data from their database. These interfaces also defines the methods that are generally known to assist the bridge data type differences that exists between Java and SQL data types basically used in a database.
Here is a table depicted below that will be explaining each of the interfaces purpose that us used to decide on the interface to use according to the condition:
Interfaces | Recommended Use |
---|---|
Statement | This interface is generally used in order to get the general-purpose access to the user's database database. It has been proven useful when the users are using static SQL statements at the runtime. Parameters are generally not accepted by the Statement interface. |
PreparedStatement | This interface is generally used when the user plans to use the SQL statements several times. The PreparedStatement interface generally accepts the input parameters at runtime. |
CallableStatement | This interface is generally used when the user want to access the database stored procedures. The CallableStatement interface is also known to accept runtime input parameters. |
There are certain things that the user can use in creating a Statement object to execute a SQL statement just by using the Connection object's createStatement( ) method.
Here is an exampleStatement stmt = null; try { stmt = conn.createStatement( ); . . . } catch (SQLException e) { . . . } finally { . . . }
After the user have created a Statement object then they can use that in order to execute an SQL statement with one of its three execute methods that are explained below with a brief description:
Just after the user close a Connection objects in order to save database resources, and this is the same reason that for which the user or the programmer should close the Statement object.
In order to close this, only a simple call to the close() method will do the most of the job. Please note that in case the user closes the Connection object first then it will also close the Statement object as well. Object In order to ensure proper cleanup, the user should always explicitly close the statement object.
Here is an exampleStatement stmt = null; try { stmt = conn.createStatement( ); . . . } catch (SQLException e) { . . . } finally { stmt.close(); }
The PreparedStatement interface in the JDBC generally extends the Statement interface that generally provides the user some added functionality with a couple of advantages over a generic Statement object. This statement is generally known to provide the flexibility of supplying the arguments in a dynamic way.
Generally, all the parameters that are in JDBC are represented by the ? Symbol and that is basically known as the parameter marker. The user or the programmer must supply the values for each of the parameter beforehand executing the SQL statement.
In order to hind the values together the parameters the setXXX() method is used, where XXX generally represents the Java data type of the value that the user wish to bind to the input parameter. Please note that if the programmer forgets to supply the values then a SQLException will be received.
Each of the parameter markers is generally referred by its ordinal position. And the process goes like: the first marker is used to represent position 1, the next position 2, and the list goes on. This method has various differences as compared to the Java array indices that basically starts at 0.
This is very interesting to know that all of the Statement object's methods that are used for interacting with the database (a) execute(), (b) executeQuery(), and (c) executeUpdate(), they also work with the PreparedStatement object. But in order to do that, the methods are generally modified in order to use SQL statements that can input the parameters.
Here is an examplePreparedStatement pstmt = null; try { String SQL = "Update Employees SET age = ? WHERE id = ?"; pstmt = conn.prepareStatement(SQL); . . . } catch (SQLException e) { . . . } finally { . . . }
The reason for closing the PreparedStatement object is same Just of the closing of a Statement object. In order to close the method a user will only need a simple call. In case the user decides to close the Connection object first, then it will also close the PreparedStatement object as well. But it is recommended that the user should always explicitly close the PreparedStatement object in order to ensure proper cleanup.
Here is an examplePreparedStatement pstmt = null; try { String SQL = "Update Employees SET age = ? WHERE id = ?"; pstmt = conn.prepareStatement(SQL); . . . } catch (SQLException e) { . . . } finally { pstmt.close(); }
The CallableStatement object is basically created the same way as a Connection object creates the Statement and PreparedStatement objects. This statement is generally used to execute a call to a database stored procedure.
DELIMITER $$ DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$ CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255)) BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END $$ DELIMITER ;
Note : This is the stored procedure for MySQL
There are generally three types of parameters that exist that are IN, OUT, and INOUT. And the PreparedStatement object just only uses the IN parameter. As far as the terms of the CallableStatement object the n it can use all the three.
Here is a brief description of all the three parameters that has been depicted below:
Parameter | Description |
---|---|
IN | A parameter that has a value and that value is not known while the SQL statement is being created. The programmers then are responsible to bind values to IN parameters with the setXXX() methods. |
OUT | This is basically a parameter whose value is being supplied by the SQL statement that it returns. The programmer generally retrieve values from theOUT parameters with the getXXX() methods. |
INOUT | This is basically a parameter that generally delivers both input and the output values. The variables are basically binds with the setXXX() methods and retrieve values with the getXXX() methods. |
CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall (SQL); . . . } catch (SQLException e) { . . . } finally { . . . }
The String variable SQL that has been used in the above example generally represents the stored procedure with the parameter placeholders.
The operations principle or the handling of the CallableStatement objects is basically same like that of the PreparedStatement objects. The programmer should bind the values to all the parameters beforehand executing the statement if the programmer fails to do so then they will receive an SQLException. In case the programmer have IN parameters, then it is very simple as they have to follow the same rules and techniques that apply to a PreparedStatement object.
Whenever it is implicated that a programmer have to use OUT and INOUT parameters the it is mandatory that they must employ an additional CallableStatement method, registerOutParameter(). The registerOutParameter() method is basically the method that is responsible for binding the JDBC data type to the data type that is generally the stored procedure is expected to return. Once the stored procedure is being called then the user will retrieve the value from the OUT parameter with the appropriate getXXX() method. This method is also known to casts the retrieved value of SQL type to a Java data type.
The reason for closing the CallableStatement object is actually the same that is used for various other Statement object. The programmer just have to give a simple call to the close() method in order to close it. In case the programmer happens to close the Connection object first then this will close the CallableStatement object as well. But as a matter of fact the programmer is supposed to explicitly close the CallableStatement object always in order to ensure proper cleanup.
Here is an exampleCallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall (SQL); . . . } catch (SQLException e) { . . . } finally { cstmt.close(); }