Java JDBC

 

1.       MS ODBC and JavaSoft ODBC

 

    JDBC borrowed the idea from successful ODBC. Both are based on X/Open Call level interface specification.

 

 

    In both methods, the following architecture is used

Application Program

 
 


                                 

 


JDBC Driver Manager

 
                               

 

 

 

 

 


                                                          

                                                                               

ODBC Driver

 
                                   |

                               

 

Database Server

 
                                   

 

 

   JavaSoft supplies a JDBC-ODBC bridge for Solaries and MS Window 95 and NT. If you already have ODBC drive, then you can connect to database without buying database supplier's JDBC driver.

 

   There are two group of API for database connectivity. JDBC API is for programmer who wants to write application based on database. JDBC Driver API is for programmers who want to develop JDBC drivers for different databases.

 

2.       Connection to Database Server

 

  There are several classes for programmer to connect to database, issue SQL statement and create result set, and retrieve data from the result set.

 

  The major steps and the corresponding classes are given below. (Given a supplier's table S(Snum, SName, Status, City))

 

                Step                                                                        Statements and Classes

                ==========================   ============================

I.              For retrieve a database data

                1. Load Driver into DriverManager:  Class.forName("driverName");

                                                                                                Class.forName("oralce.jdbc.driver.OracleDriver");

                                                                                                ForName() throws ClassNotFoundException, or

                                                                                                DriverManager.registerDriver(new … );

                2. Connecting to database  Connection           cnn = DriverManager.getConnection(

 url, usr, password);

                                1-1. Specify the JDBC driver              String url = "jdbc:odbc:datasourcename";

                                                The url consists of (1) protocol, (2) driver and (3) database source name. Ex.

                                                String url = "jdbc:oracle:thin:@cheval.cs.csubak.edu:1521:TEST";

                                1-2. Specify user name                        String usr = "xxxx" ;

                                1-3. Specify the password                  String password = "yyyy" ;

                 

                3. Create a statement object                               Statement stmt = cnn.createStatement();

                   from connection object.

                4. Make and execute SQL statement from        String sql = "SELECT * FROM s" ;

                   and create result set.                                        ResultSet rs = stmt.executeQuery(sql);

                                                                                               

                5. Use boolean rs.next() to move to the first record and the next record.

                6. Use result set's get                                          String sno = rs.getString(1); //1st col.

                   functions to retrieve data   or                           rs.getString("Snum");

                   in table's columns.                                            int    st = rs.getInt("Status");

 

User ResultSet.getMetaData() to get  column count, column names, length, types and etc.

 

II.                            For update statements (UPDATE, DELETE, INSERT) ,

               

                1. Make a delete, update or                                String ups =

                   insert statement string                                     "DELETE * FROM s WHERE Status < 10" ;

                2. Execute the update the                                    int cnt = stmt.executeUpdate(ups)

                   update statement             

                                                                                                cnt is the number of records affected

 

III.           To execute a SQL statement with parameters

 

                1. Make a SQL string                                           String sql = "Select * from s where status = ?";

                                                                                                 

 

                   Use placeholder (?) for each host variable that you want to use in

                parameterized SQL. The position of the first placeholder is 1.

 

                2. Create a PreparedStatement                            PreparedStatement pstmt = new

                                                                                                cnn.prepareStatement(sql) ;

                3. Link host variable to

                   place holder(?) by its                                        pstmt.setString(1, hostVar) ;

                   position number

                4. Execute the prepared                                       ResultSet rs = pstmt.executeQuery();

                   statement.

 

IV.                 To execute a Stored procedure:

                1. Make a SQL string                                           String sql = "{ call storedProc(?, ?, …)}";

String sql = "{?=call storedProc(?, ?, …)}";

                2. Create a PreparedStatement                            CallableStatement cstmt = new

                                                                                                cnn.prepareCall(sql) ;

                3. Register each of all OUT parameters:           cstmt.registerOutParameter(2, Types.INTEGER);

                4. Link host variable to

                   placeholder(?) by its                                         sstmt.setInt(1, hostInt) ;

                   position number

                5. Execute the prepared                                       ResultSet rs = cstmt.execute();

                   statement.

 

3. Java and SQL Data Types

 

   To pass paramters to prepared SQL statement or get fields out of result set, java variables are used. The type of java variable must match the type of variable of SQL. The following table shows the correspondance between Java data type and SQL data types.

 

                SQL Data Types                                                  Java Data Types

                INTEGER or INT                                  int

                SMALLINT                                                           short

 

                NUMERIC(w, d)                                                   java.sql.Numeric

                DECIMAL(w, d)

                DEC(w, d)

 

                FLOAT(n)                                                             double

                REAL                                                                     float

                DOUBLE                                                                double

 

                CHARACTER(n)                                                  String

                CHAR(n)

                VARCHAR(n)

 

                DATE                                                                     java.sql.Date

                TIME                                                                      java.sql.Time

                TIMESTAMP                                                       java.sql.Timestamp

 

4. JDBC Related Class and interfaces

 

   From the example statements, the main classes used to access database include

 

                Class                                      Purposes

                Connection                           - Connects to database

                                                                - Creates a statement to execute SQL statement.

Statement                              - Regulate objects used to executes a static query or static update statement. The query statement may return multiple result sets.

                                                                SQL statements are represented as string.

                ResultSet                               - Contains a set of records result from

                                                                  executing a query statement. No result set is

                                                                  created for update statements.

                                                                - Retrieve meta data (column definitions).

                                                                  Combined with ResultSetMetaData class, you can

                                                                  retrieve column label, width and etc.

PreparedStatement               - Regulate objects that take SQL statement with parameters, compile the statement once and executed many times with different argument.

                                                                - The setXX() functions allow you set the values of parameters.

-          Creates result set from parameteried query.

CallableStatement                - Regulate objects that call a stored procedures and that can return one or more result sets.

                DatabaseMetaData              - Retrieves information about database structure

                                                                - Retrieves information about exotic features

                                                                  such what is the result of null + non-null.

 

4.1 Connection Class

 

See API for Connection class definition.

 

 

4.2   Statement Class

 

-          See API for Statement Class

 

 

4.3   ResultSet Class

 

 - See API for ResultSet class.

 

 

4.4   PreparedStatement Class

 

    The prepared statements allow statements be prepared/compiled once and execute many times with different set of actual parameters. The prepared statements increase performance in cases such load a table rows with text file. Mainly, the prepared statements allow program to

·         Execute query or update SQL statements with parameters.

·         Use getXXX() to link host variables to SQL parameters (placeholders ?).

 

   See API for PreparedStatement class definition.

 

4.5                CallableStatement Class

 

       The callable statement is a Java class object that allows you make a call to a stored procedure or function. The calls to stored subprogram will be more efficient executed than Java Statement and PreparedStatement object since the compilation is done, and the executions of stored procedures share the same program.

 

4.6                ResultSetMetaData

 

   The result set meta data class provides programmers with data about a result set. The data includes column names, data types and lengths, and etc. See Java API for class definition.

 

4.7                DatabaseMetaData Class

 

 - Member Function Summaries

·         Get tables in a schema.

·         Many more data structures related functions.

 

5.                   Examples

 

  See examples in java_jdbc subdirectory

 

6.                   Connection Pool in JDBC 2.0 Standard Extension (JDBC 2.0 SE)

 

6.1                 What is connection pool?

6.2                 Why do we connection pool?

6.3                 When do we use connection pool?

6.4                 Connection Pool Related Classes

6.4.1            javax.sql.DataSource Interface

 

·         The implmenting class of DataSource interface is a factory for creating connection objects. The object implementing DataSource interface will typically be registered with JNDI service provider. A JDBC driver that is accessed via the DataSource API does not automatically register itself with the DriverManager.

 

6.4.2            javax.sql.ConnectionPoolDataSource Interface

 

·         The implementing class of ConnectionPoolDataSource will  be used to create connection objects that will be stored in a connection pool.

·         The implementing class will typically registered with JNDI service.

 

6.4.3            javax.sql.PooledConnection Interface

 

·         A pooled connection object represents a physical connection to data source. The pooled connection objet also provide hooks for connection pool management.