SlideShare a Scribd company logo
1 of 47
Download to read offline
JDBC


 Dr. Jim Arlow
 Clear View Training Limited
 www.clearviewtraining.com


              © Clear View Training 2005 v1.3   1
Copyright notice

This course is Copyright © 2000 Clear View Training Limited.
All rights reserved.
Materials in this course may not be reproduced electronically
or optically without express permission from the copyright
holder. For reprint permissions, contact
Jim.Arlow@clearviewtraining.com




                       © Clear View Training 2005 v1.3          2
What is JDBC
                             JDBC, often known as Java
                             Database Connectivity,
Java Application
   or Applet
                             provides a Java API for
                             updating and querying
     JDBC                    relational databases using
                             Structured Query Language
                             (SQL)
                             JDBC is now at version 2.0,
                             although many databases
    RDBMS                    don’t as yet support all of
                             the JDBC 2.0 features!
                   © Clear View Training 2005 v1.3    3
The 4 step approach to JDBC
    Every JDBC program is made up of the
    following 4 steps:

Open a connection to the DB
                                                    We’ll look at
                                                    each of the
  Execute a SQL statement                            four steps
                                                      in detail!
      Process the result

Close the connection to the DB

                  © Clear View Training 2005 v1.3                   4
Example JDBC program
                                                                   1.      open connection to DB
1    import java.sql.*;
2    class SelectProducts                                            2.    execute SQL statement
3    {                                                               3.    process result
4      public static void main(java.lang.String[ ] args)
5      {                                                             4.    close connection to DB
6        try
7          {
8            Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9            Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); 1
10           Statement statement = con.createStatement( );
11           ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT");                  2
12           while ( rs.next( ) )
13            {
14              String name = rs.getString( "NAME" );
15              float price = rs.getFloat( "PRICE" );                                                   3
16              System.out.println("Name: "+name+", price: "+price);
17            }
18           statement.close( );
19           con.close( );                                                                              4
20         }
21       catch( Exception e ) { e.printStackTrace( ); }
22     }
23   }
                                      © Clear View Training 2005 v1.3                              5
Opening a connection to the DB
 There are two parts to this:
   loading a driver – we need a driver to allow
   our Java program to talk to the DB
   opening the connection itself




            © Clear View Training 2005 v1.3   6
Loading a driver
 The first step in using JDBC is to load a driver.
 Here are some examples:

The IBM DB2 driver:
     Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );


The SUN JDBC/ODBC Bridge driver:
     Class.forName( "sun.jdbc.JdbcOdbcDriver" );


                       © Clear View Training 2005 v1.3    7
There are 4 categories of driver
Type 1 JDBC-ODBC Bridge (Native Code)
  provides a Java bridge to ODBC
  implemented in native code and requires some non-Java software
  on the client
Type 2 Native-API (Partly Java)
  uses native code to access the DB with a thin Java wrapper
  can crash the JVM
Type 3 Net-protocol (All Java)
  defines a generic network protocol that interfaces with some
  middleware that accesses the DB
Type 4 Native-protocol (All Java)
  written entirely in Java

                      © Clear View Training 2005 v1.3            8
Type 1 JDBC-ODBC Bridge
                                          Provides a Java bridge to
        Java application                  ODBC
                                          Implemented in native code
       Type 1 JDBC/ODBC                   and requires some non-
                                          Java software on the client
SQL command             result set
                                          Not a mandatory
          ODBC driver                     component of the JDK, and
                                          is not automatically
                  proprietary             supported by Java run-time
                  protocol                environments
                                          Only recommended for light
                                          use
                        © Clear View Training 2005 v1.3           9
Type 2 Native API
                                            Converts JDBC commands
        Java application                    into DBMS-specific native
                                            calls
       Type 2 JDBC driver                   Implemented in native code
SQL command               result set        and requires some non-
                                            Java software on the client
       Native database library
                                            Interfaces directly with the
                     proprietary            DB, so has performance
                     protocol               advantages over Type 1



                          © Clear View Training 2005 v1.3           10
Type 3 JDBC-Net drivers
         Java application                     A three tier solution
                                              Allows pure Java clients
        Type 3 JDBC driver
                                              Can change DBMS
SQL command                 result set
                                              without affecting the
              Middleware                      client
              JDBC Driver
                      proprietary
                      protocol                                most flexible



                            © Clear View Training 2005 v1.3                   11
Type 4 Native Protocol drivers
                                          Native Protocol drivers
         Java application                 communicate directly with
                                          the DB
         Type 4 Pure Java                 They convert JDBC
                                          commands directly into the
SQL command            result set         DB’s native protocol
using                  using              No additional transformation
proprietary            proprietary
protocol                                  or middleware layers,
                       protocol
                                          therefore has high
                                          performance
                                                             best
                                                         performance
                       © Clear View Training 2005 v1.3           12
Making a connection
     Next, the driver must connect to the DBMS:
9   Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " );


                                      DB URL

                                                 login               password


                                                          optional
       The object con gives us an open database
       connection
                                   © Clear View Training 2005 v1.3                    13
Creating Statements
 A Statement object is used to send SQL
 statements to the DB
 First we get a Statement object from
 our DB connection con

 10   Statement statement = con.createStatement( );




                © Clear View Training 2005 v1.3       14
Example – creating a table
1    import java.sql.*;
2    class CreateProductTable
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8             Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9             String url = "jdbc:db2:TEST";
10            Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" );
11            Statement statement = con.createStatement();
12            String createProductTable = "CREATE TABLE PRODUCT " +
13                                          "(NAME VARCHAR(64), " +
14                                          "ID VARCHAR(32) NOT NULL, " +
15                                          "PRICE FLOAT, " +
16                                          "DESC VARCHAR(256), " +
17                                          "PRIMARY KEY(ID))";
18            statement.executeUpdate( createProductTable );
19         } catch( Exception e ) { e.printStackTrace(); }
20     }
21   }
                                        © Clear View Training 2005 v1.3                   15
executeUpdate(String sql)
     Use the executeUpdate() method of the Statement
     object to execute DDL and SQL commands that
     update a table (INSERT, UPDATE, DELETE):
12        String createProductTable = "CREATE TABLE PRODUCT " +
13                                    "(NAME VARCHAR(64), " +
14                                    "ID VARCHAR(32) NOT NULL, " +
15                                    "PRICE FLOAT, " +
16                                    "DESC VARCHAR(256), " +
17                                    "PRIMARY KEY(ID))";
18        statement.executeUpdate( createProductTable );



     Be careful to always put spaces in the SQL string at the right places!

                              © Clear View Training 2005 v1.3             16
Example: inserting rows
1    import java.sql.*;
2    class InsertProducts
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8             Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9             String url = "jdbc:db2:TEST";
10            Connection con = DriverManager.getConnection( url, "db2admin", " db2admin " );
11            Statement statement = con.createStatement();
12            statement.executeUpdate("INSERT INTO PRODUCT " +
13                                         "VALUES ( 'UML User Guide', " +
14                                         "'0-201-57168-4', 47.99, 'The UML user guide')" );
15            statement.executeUpdate("INSERT INTO PRODUCT " +
16                                         "VALUES ( 'Java Enterprise in a Nutshell', " +
17                                         "'1-56592-483-5', 29.95, 'A good introduction to J2EE')" );
18            con.close();
19            statement.close();
20         }catch( Exception e ) { e.printStackTrace(); }
21     }
22   }

                                           © Clear View Training 2005 v1.3                               17
executeQuery(String sql)
     We use the executeQuery(…) method of the
     Statement object to execute a SQL statement that
     returns a single ResultSet:

11   ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT");




     Typically, the SQL statement is a SQL SELECT
     executeQuery(…) always returns a ResultSet,
     never null. However, the ResultSet may be empty

                              © Clear View Training 2005 v1.3                18
Example: selecting rows
1    import java.sql.*;
2    class SelectProducts
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8              Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9              Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " );
10             Statement statement = con.createStatement();
11             ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT");
12             while ( rs.next( ) )
13              {
14                String name = rs.getString( "NAME" );
15                float price = rs.getFloat( "PRICE" );
16                System.out.println("Name: "+name+", price: "+price);
17              }
18             statement.close();
19             con.close();
20         } catch( Exception e ) { e.printStackTrace(); }
21     }
22   }
                                      © Clear View Training 2005 v1.3                            19
ResultSet
     ResultSet objects provide access to a table
       usually they provide access to the pseudo table that is the result of
       a SQL query
     ResultSet objects maintain a cursor pointing to the current
     row of data
       this cursor initially points before the first row and is moved to the
       first row by the next() method

11      ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT");
12      while ( rs.next( ) )
13       {
14         String name = rs.getString( "NAME" );
15         float price = rs.getFloat( "PRICE" );
16         System.out.println("Name: "+name+", price: "+price);
17       }

                              © Clear View Training 2005 v1.3                   20
JDBC
                                                                   2.0
   Types of ResultSet
 Statement statement = con.createStatement( type, concurrency);


Depending on the parameters passed into the
Connection.createStatement(…) method, we can get
a total of 6 different types of ResultSet returned!
Passing no arguments to createStatement() gives a
default forward-only read-only ResultSet
We’ll look at the possible values for type and
concurrency next…

                       © Clear View Training 2005 v1.3             21
JDBC
                                                                      2.0
       type
           type =                                   semantics
ResultSet.TYPE_SCROLL_SENSITIVE       Scrollable. Reflects changes made to
                                      the underlying data
ResultSet.TYPE_SCROLL_INSENSITIVE Scrollable. Does not reflect changes
                                      made to the underlying data

ResultSet.TYPE_FORWARD_ONLY           Not scrollable. Does not reflect
                                      changes made to the underlying data


 N.B. Scrollable means that we can navigate forwards and
 backwards through the ResultSet
                          © Clear View Training 2005 v1.3               22
JDBC
                                                             2.0
      concurrency

    concurrency =                               semantics

ResultSet.CONCUR_READ_ONLY
                                the ResultSet may not be
                                updated
ResultSet.CONCUR_UPDATABLE
                                the ResultSet may be
                                updated


                       © Clear View Training 2005 v1.3       23
getXXX(…) methods                                  see notes!


The ResultSet has a wide range of methods to
return SQL types such as VARCHAR as equivalent
Java types
For example rs.getString(“NAME”) returns the
product name as a String
  in fact, we can get any of the SQL types with getString(…)
  and it will automatically be converted to a String
The getXXX(…) methods can take a column name or
the number of the column
  column numbers start at 1 and go from left to right

                    © Clear View Training 2005 v1.3                24
JDBC
                                                                       2.0
          ResultSet navigation methods
   Method                                Semantics
first()         Moves cursor to first row
last()          Moves cursor to last row
next()          Moves cursor to next row
previous()      Moves cursor to previous row
beforeFirst()   Moves cursor to just before the first row
afterLast()     Moves cursor to just after the last row
absolute(int)   Moves cursor to a row index. If positive – counting from
                the front, if negative – from the back
relative(int)   Moves cursor a relative number of rows, positive or
                negative from the current position

                           © Clear View Training 2005 v1.3             25
Working with ResultSets
We can limit the number of rows that a ResultSet
can contain by using:
          Statement statement = con.createStatement();
          statement.setMaxRows(100);

If a Statement returns multiple ResultSets, then we
can move to the next ResultSet as follows:
          while ( statement.getMoreResults() )
               {
               rs = statement. getResultSet();
               …

                     © Clear View Training 2005 v1.3     26
JDBC
                                                    2.0
  Updateable ResultSet
If the statement is created to be of type
ResultSet.CONCUR_UPDATABLE, then we
may be able to update the database by
modifying the ResultSet itself
  this may not be supported by all DBMSs as it is
  not a mandatory requirement for JDBC 2.0
  compatibility


                 © Clear View Training 2005 v1.3    27
JDBC
                                                         2.0
   updateXXX(…) methods
Like the getXXX(…) methods, the ResultSet has a
wide range of updateXXX(…) methods to change
the value of SQL types in the ResultSet
For example rs.updateString(“PRICE”, 40.0F)
changes the price of a product
  we have to be very careful that that all the types in an
  update expression match
The updateXXX(…) methods can take a column
name or the number of the column
  column numbers start at 1 and go from left to right

                    © Clear View Training 2005 v1.3      28
JDBC
                                               2.0
Updating a row
 This is a three step procedure:
   navigate to the appropriate row using a
   SELECT and ResultSet navigation methods
   update the field values in the ResultSet
   write the change back to the DB

     rs.first();
     rs.updateFloat("PRICE", 40.0F);
     rs.updateRow();

            © Clear View Training 2005 v1.3    29
JDBC
                                                2.0
Inserting a row
 This is a three step procedure:
   navigate to insert row
   update the field values in the ResultSet
   write the row to the DB
    rs.moveToInsertRow();
    rs.updateString("NAME", "UML Distilled");
    rs.updateString("ID", "0-201-32563-2");
    rs.updateFloat("PRICE", 40.0F);
    rs.insertRow();

             © Clear View Training 2005 v1.3    30
JDBC
                                                2.0
Deleting a row
 This is a simple two step procedure:
   navigate to row to be deleted
   delete the row


    rs.last();
    rs.deleteRow();




             © Clear View Training 2005 v1.3    31
Prepared statements
If we want to execute the same SQL
statement several times, we can create a
PreparedStatement object:
  at the point of creation of a PreparedStatement
  object the SQL code is sent to the DB and
  compiled. Subsequent executions may therefore
  be more efficient than normal statements
  PreparedStatements can take parameters

                 © Clear View Training 2005 v1.3   32
Prepared statement example
1    import java.sql.*;
2    class PreparedStatementTest
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8               Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9               Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " );
10              PreparedStatement findBooks = con.prepareStatement(
11                                               "SELECT NAME FROM PRODUCT WHERE NAME LIKE ? " );
12              findBooks.setString( 1, "%Java%" );
13              ResultSet rs = findBooks.executeQuery();
14              while ( rs.next() )
15                { System.out.println("Name: "+ rs.getString( "NAME" ) ); }
16              findBooks.setString( 1, "%UML%" );
17              rs = findBooks.executeQuery();
19              while ( rs.next() )
20                { System.out.println("Name: "+ rs.getString( "NAME" ) ); }
21              findBooks.close();
22              con.close();
23         } catch( Exception e ) { e.printStackTrace(); }
24     }
25   }



                                        © Clear View Training 2005 v1.3                                      33
Transactions
Normally each SQL statement will be committed
automatically when it has completed executing
(auto commit is on)
A group of statements can be committed together
by turning auto commit off, and explicitly
committing the statements ourselves
This ensures that if any of the statements fail, they
all fail. We can then roll back the transaction

                  © Clear View Training 2005 v1.3   34
JDBC transaction modes
              con.setTransactionIsolation( mode )
TRANSACTION_NONE
   transactions are disabled or not supported
TRANSACTION_READ_UNCOMITTED
   other transactions may see the results before the transaction is committed
   “dirty read” - uncommitted rows might be rolled back if the transaction fails.
TRANSACTION_READ_COMMITTED
   dirty reads are not allowed.
TRANSACTION_REPEATABLE_READ
   if a transaction performs multiple reads on a row that is being changed by another
   transaction, then it does not see the changes
TRANSACTION_SERIALIZABLE
   same as TRANSACTION_REPEATABLE_READ but also protects against row insertions
   if a transaction does a read, another transaction inserts a row, and the first transaction
   does another read, the first transaction does not see the new row.
                              © Clear View Training 2005 v1.3                         35
Transaction example
1    import java.sql.*;
2    class TransactionTest
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8               Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9               String url = "jdbc:db2:TEST";
10              Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" );
11              Statement s = con.createStatement();
12              try
13                {
14                  con.setAutoCommit( false );
15                  s.executeUpdate("UPDATE PRODUCT SET PRICE = 40.00 WHERE ID = '0-201-57168-4' " );
16                  s.executeUpdate(
17                    "UPDATE REVIEW SET COMMENT = 'Now on sale!' WHERE BOOKID = '0-201-57168-4' " );
18                  con.commit();
19                }catch( SQLException e ) { con.rollback(); }
20                finally{ con.close(); s.close(); }
21         }catch( Exception e ){ e.printStackTrace(); }
22     }
23   }



                                            © Clear View Training 2005 v1.3                             36
JDBC
                                                        2.0
   Batch updates
JDBC 1.0 was very inefficient for loading a lot of data
into a DB - a separate SQL command had to be
executed for each record changed
JDBC 2.0 allows batch updates
  multiple statements can be executed as a single batch
  we can roll back the whole batch if a single statement fails
We simply add statements to be batched to a
Statement or PreparedStatement object using
addBatch()!
We can remove the statements using clearBatch()
                    © Clear View Training 2005 v1.3      37
JDBC
                                                                                                         2.0
             Batch update example
1    import java.sql.*;
2    class BatchInsertProducts
3    {
4      public static void main(java.lang.String[ ] args) throws SQLException, ClassNotFoundException
5      {
6             Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
7             String url = "jdbc:db2:TEST";
8             Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" );
9             Statement s = con.createStatement();
10            try
11              {
12                con.setAutoCommit( false );
13                s.addBatch("INSERT INTO PRODUCT " + "VALUES ( 'The Object Constraint Language', " +
15                           "'0-201-37940-4', 29.95, 'All about constraints')" );
16                s.addBatch("INSERT INTO PRODUCT " + "VALUES ( 'The Rational Unified Process', " +
18                           "'0-201-60459-0',29.95, 'A good introduction to RUP')" );
19                int[ ] count = s.executeBatch( );
20                con.commit( );
21
22           }catch( SQLException e ) { con.rollback( ); }
23           finally{ con.close( ); s.close( ); }
24       }
25   }



                                             © Clear View Training 2005 v1.3                             38
Stored procedures
The syntax for defining a stored procedure is
different for each DBMS
  use the stored procedure tools that come with
  the RDBMS
The syntax for calling a stored procedure is
different for each DBMS
  JDBC defines a special escape sequence syntax
  that allows stored procedures to be called in the
  same way on any RDBMS

                 © Clear View Training 2005 v1.3   39
Escape sequences
    {?= call <procedure-name>(<arg1>,<arg2>, …)}
    {call <procedure-name>(<arg1>,<arg2>, …)}

The ? represents a return value
<procedure-name> is the name of the stored
procedure
<arg1> etc. are the arguments passed into
and out of the stored procedure

                  © Clear View Training 2005 v1.3   40
Stored procedure example
1    import java.sql.*;
2    class StoredProcedureExample
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8               Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9               Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " );
10              CallableStatement cs = con.prepareCall("{call DB2ADMIN.ALLPRODUCTS}");
11              cs.execute();
12              ResultSet rs = cs.getResultSet();
13              while ( rs.next() )
14
15
                 {
                   String name = rs.getString( "NAME" );
                                                                                                  create a callable
16                 float price = rs.getFloat( "PRICE" );                                              statement
17                 System.out.println("Name: "+name+", price: "+price);
18               }
19              con.close();
20              cs.close();
21         }catch( Exception e ){ e.printStackTrace(); }
22     }
23   }




                                          © Clear View Training 2005 v1.3                                     41
Using input parameters
1    import java.sql.*;
2    class StoredProcedureParameterExample
3    {
4      public static void main(java.lang.String[ ] args)
5      {
6        try
7          {
8               Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
9               Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", "db2admin" );
10              CallableStatement cs = con.prepareCall("{call DB2ADMIN.FINDPROD2(?)}");
11              cs.setString( 1, "%UML%" );
12              cs.execute();
13              ResultSet rs = cs.getResultSet();               set the
14              while ( rs.next() )
                                                           parameter value              we specify a
15               {
16                 String name = rs.getString( "NAME" );                             single parameter
17                 float price = rs.getFloat( "PRICE" );
18                 System.out.println("Name: "+name+", price: "+price);
19               }
20              con.close();
21              cs.close();
22         }catch( Exception e ){ e.printStackTrace(); }
23     }
24   }
                                      © Clear View Training 2005 v1.3                               42
Metadata
 JDBC has facilities to get information about a
 ResultSet or DB
    for a ResultSet, this information may include the number
    and names of the columns, the types of the columns etc.
    for a DB this information may include the name of the
    driver, the DB URL etc.
 This information about a ResultSet or DB is known as
 metadata
 See the following classes for details:
    ResultSet – see ResultSetMetadata
    Database – see DatabaseMetadata


                 © Clear View Training 2005 v1.3           43
Getting metadata
     Getting database metadata:
Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", "db2admin" );
DatabaseMetaData dmd = con.getMetaData( );




     Getting ResultSet metadata:
Statement statement = con.createStatement();
ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT");
ResultSetMetaData rsmd = rs.getMetaData( );




                            © Clear View Training 2005 v1.3                          44
Summary
 We have looked at:
   4 step approach to JDBC
     Connection
     drivers
   Statement
     PreparedStatement
     batch update
     transactions
     CallableStatement (stored procedures)
   ResultSet handling
   Metadata

               © Clear View Training 2005 v1.3   45
Appendix: IBM DB2 (v6)




         © Clear View Training 2005 v1.3   46
Installing the JDBC 2.0 driver
 To install JDBC 2.0:
   go to the directory sqllibjava12
   run the command usejdbc2
 To switch back to 1.2.2:
   go to the directory sqllibjava12
   run the command usejdbc1



            © Clear View Training 2005 v1.3   47

More Related Content

What's hot

High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...Vladimir Bacvanski, PhD
 
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Edureka!
 
Summer training java
Summer training javaSummer training java
Summer training javaArshit Rai
 
Summer training java
Summer training javaSummer training java
Summer training javaArshit Rai
 
Architecture1101 jy21cyl
Architecture1101 jy21cylArchitecture1101 jy21cyl
Architecture1101 jy21cylZouhayr Rich
 
Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewEugene Bogaart
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the startershohancse
 
Java keynote preso
Java keynote presoJava keynote preso
Java keynote presoArtur Alves
 
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
2012 04-09-v2-tdp-1167-cdi-bestpractices-final2012 04-09-v2-tdp-1167-cdi-bestpractices-final
2012 04-09-v2-tdp-1167-cdi-bestpractices-finalRohit Kelapure
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)blahap
 

What's hot (20)

Unit 07: Design Patterns and Frameworks (1/3)
Unit 07: Design Patterns and Frameworks (1/3)Unit 07: Design Patterns and Frameworks (1/3)
Unit 07: Design Patterns and Frameworks (1/3)
 
High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...
 
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
 
Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)
 
Summer training java
Summer training javaSummer training java
Summer training java
 
Summer training java
Summer training javaSummer training java
Summer training java
 
Jdbc
JdbcJdbc
Jdbc
 
Unit 01 - Introduction
Unit 01 - IntroductionUnit 01 - Introduction
Unit 01 - Introduction
 
Unit 04: From Requirements to the UX Model
Unit 04: From Requirements to the UX ModelUnit 04: From Requirements to the UX Model
Unit 04: From Requirements to the UX Model
 
Unit 08: Security for Web Applications
Unit 08: Security for Web ApplicationsUnit 08: Security for Web Applications
Unit 08: Security for Web Applications
 
Architecture1101 jy21cyl
Architecture1101 jy21cylArchitecture1101 jy21cyl
Architecture1101 jy21cyl
 
Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 Overview
 
Dacj 4 2-a
Dacj 4 2-aDacj 4 2-a
Dacj 4 2-a
 
Unit 06: The Web Application Extension for UML
Unit 06: The Web Application Extension for UMLUnit 06: The Web Application Extension for UML
Unit 06: The Web Application Extension for UML
 
Ejb (1)
Ejb (1)Ejb (1)
Ejb (1)
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the starter
 
Java keynote preso
Java keynote presoJava keynote preso
Java keynote preso
 
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
2012 04-09-v2-tdp-1167-cdi-bestpractices-final2012 04-09-v2-tdp-1167-cdi-bestpractices-final
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)
 
Unit 02: Web Technologies (1/2)
Unit 02: Web Technologies (1/2)Unit 02: Web Technologies (1/2)
Unit 02: Web Technologies (1/2)
 

Similar to JDBC Guide for Beginners

JDBC with MySQL.pdf
JDBC with MySQL.pdfJDBC with MySQL.pdf
JDBC with MySQL.pdfArumugam90
 
JDBC with MySQL.pdf
JDBC with MySQL.pdfJDBC with MySQL.pdf
JDBC with MySQL.pdfArumugam90
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySqlDhyey Dattani
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySqlDhyey Dattani
 
jdbc-130913021409-phpapp01000988www.pptx
jdbc-130913021409-phpapp01000988www.pptxjdbc-130913021409-phpapp01000988www.pptx
jdbc-130913021409-phpapp01000988www.pptxssuser8878c1
 
chapter 5 java.pptx
chapter 5  java.pptxchapter 5  java.pptx
chapter 5 java.pptxBekiTube
 
JDBC : Java Database Connectivity
JDBC : Java Database Connectivity JDBC : Java Database Connectivity
JDBC : Java Database Connectivity DevAdnani
 
Unit 5-jdbc2
Unit 5-jdbc2Unit 5-jdbc2
Unit 5-jdbc2msafad
 
JDBC Presentation with JAVA code Examples.pdf
JDBC Presentation with JAVA code Examples.pdfJDBC Presentation with JAVA code Examples.pdf
JDBC Presentation with JAVA code Examples.pdfssuser8878c1
 
jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx
 jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx
jdbc Java Database Connectivity ujjwal matoliya jdbc.pptxujjwalmatoliya
 
creating jdbc connection
creating jdbc connectioncreating jdbc connection
creating jdbc connectionPaneliya Prince
 
creating jdbc connection
creating jdbc connectioncreating jdbc connection
creating jdbc connectionPaneliya Prince
 
java database connection (jdbc)
java database connection (jdbc)java database connection (jdbc)
java database connection (jdbc)Sanjay Gunjal
 

Similar to JDBC Guide for Beginners (20)

JDBC with MySQL.pdf
JDBC with MySQL.pdfJDBC with MySQL.pdf
JDBC with MySQL.pdf
 
JDBC with MySQL.pdf
JDBC with MySQL.pdfJDBC with MySQL.pdf
JDBC with MySQL.pdf
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySql
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySql
 
java arlow jdbc tutorial(java programming tutorials)
java arlow jdbc tutorial(java programming tutorials)java arlow jdbc tutorial(java programming tutorials)
java arlow jdbc tutorial(java programming tutorials)
 
jdbc-130913021409-phpapp01000988www.pptx
jdbc-130913021409-phpapp01000988www.pptxjdbc-130913021409-phpapp01000988www.pptx
jdbc-130913021409-phpapp01000988www.pptx
 
chapter 5 java.pptx
chapter 5  java.pptxchapter 5  java.pptx
chapter 5 java.pptx
 
JDBC : Java Database Connectivity
JDBC : Java Database Connectivity JDBC : Java Database Connectivity
JDBC : Java Database Connectivity
 
Unit 5-jdbc2
Unit 5-jdbc2Unit 5-jdbc2
Unit 5-jdbc2
 
jdbc
jdbcjdbc
jdbc
 
JDBC Presentation with JAVA code Examples.pdf
JDBC Presentation with JAVA code Examples.pdfJDBC Presentation with JAVA code Examples.pdf
JDBC Presentation with JAVA code Examples.pdf
 
jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx
 jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx
jdbc Java Database Connectivity ujjwal matoliya jdbc.pptx
 
creating jdbc connection
creating jdbc connectioncreating jdbc connection
creating jdbc connection
 
creating jdbc connection
creating jdbc connectioncreating jdbc connection
creating jdbc connection
 
Vinay
VinayVinay
Vinay
 
java database connection (jdbc)
java database connection (jdbc)java database connection (jdbc)
java database connection (jdbc)
 
Jdbc
JdbcJdbc
Jdbc
 
JDBC
JDBCJDBC
JDBC
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc new
Jdbc newJdbc new
Jdbc new
 

Recently uploaded

Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for BeginnersSabitha Banu
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...JojoEDelaCruz
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxVanesaIglesias10
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17Celine George
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptshraddhaparab530
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptxmary850239
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 

Recently uploaded (20)

Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for Beginners
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptxYOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptx
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17
 
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptxFINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.ppt
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 

JDBC Guide for Beginners

  • 1. JDBC Dr. Jim Arlow Clear View Training Limited www.clearviewtraining.com © Clear View Training 2005 v1.3 1
  • 2. Copyright notice This course is Copyright © 2000 Clear View Training Limited. All rights reserved. Materials in this course may not be reproduced electronically or optically without express permission from the copyright holder. For reprint permissions, contact Jim.Arlow@clearviewtraining.com © Clear View Training 2005 v1.3 2
  • 3. What is JDBC JDBC, often known as Java Database Connectivity, Java Application or Applet provides a Java API for updating and querying JDBC relational databases using Structured Query Language (SQL) JDBC is now at version 2.0, although many databases RDBMS don’t as yet support all of the JDBC 2.0 features! © Clear View Training 2005 v1.3 3
  • 4. The 4 step approach to JDBC Every JDBC program is made up of the following 4 steps: Open a connection to the DB We’ll look at each of the Execute a SQL statement four steps in detail! Process the result Close the connection to the DB © Clear View Training 2005 v1.3 4
  • 5. Example JDBC program 1. open connection to DB 1 import java.sql.*; 2 class SelectProducts 2. execute SQL statement 3 { 3. process result 4 public static void main(java.lang.String[ ] args) 5 { 4. close connection to DB 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); 1 10 Statement statement = con.createStatement( ); 11 ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); 2 12 while ( rs.next( ) ) 13 { 14 String name = rs.getString( "NAME" ); 15 float price = rs.getFloat( "PRICE" ); 3 16 System.out.println("Name: "+name+", price: "+price); 17 } 18 statement.close( ); 19 con.close( ); 4 20 } 21 catch( Exception e ) { e.printStackTrace( ); } 22 } 23 } © Clear View Training 2005 v1.3 5
  • 6. Opening a connection to the DB There are two parts to this: loading a driver – we need a driver to allow our Java program to talk to the DB opening the connection itself © Clear View Training 2005 v1.3 6
  • 7. Loading a driver The first step in using JDBC is to load a driver. Here are some examples: The IBM DB2 driver: Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); The SUN JDBC/ODBC Bridge driver: Class.forName( "sun.jdbc.JdbcOdbcDriver" ); © Clear View Training 2005 v1.3 7
  • 8. There are 4 categories of driver Type 1 JDBC-ODBC Bridge (Native Code) provides a Java bridge to ODBC implemented in native code and requires some non-Java software on the client Type 2 Native-API (Partly Java) uses native code to access the DB with a thin Java wrapper can crash the JVM Type 3 Net-protocol (All Java) defines a generic network protocol that interfaces with some middleware that accesses the DB Type 4 Native-protocol (All Java) written entirely in Java © Clear View Training 2005 v1.3 8
  • 9. Type 1 JDBC-ODBC Bridge Provides a Java bridge to Java application ODBC Implemented in native code Type 1 JDBC/ODBC and requires some non- Java software on the client SQL command result set Not a mandatory ODBC driver component of the JDK, and is not automatically proprietary supported by Java run-time protocol environments Only recommended for light use © Clear View Training 2005 v1.3 9
  • 10. Type 2 Native API Converts JDBC commands Java application into DBMS-specific native calls Type 2 JDBC driver Implemented in native code SQL command result set and requires some non- Java software on the client Native database library Interfaces directly with the proprietary DB, so has performance protocol advantages over Type 1 © Clear View Training 2005 v1.3 10
  • 11. Type 3 JDBC-Net drivers Java application A three tier solution Allows pure Java clients Type 3 JDBC driver Can change DBMS SQL command result set without affecting the Middleware client JDBC Driver proprietary protocol most flexible © Clear View Training 2005 v1.3 11
  • 12. Type 4 Native Protocol drivers Native Protocol drivers Java application communicate directly with the DB Type 4 Pure Java They convert JDBC commands directly into the SQL command result set DB’s native protocol using using No additional transformation proprietary proprietary protocol or middleware layers, protocol therefore has high performance best performance © Clear View Training 2005 v1.3 12
  • 13. Making a connection Next, the driver must connect to the DBMS: 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); DB URL login password optional The object con gives us an open database connection © Clear View Training 2005 v1.3 13
  • 14. Creating Statements A Statement object is used to send SQL statements to the DB First we get a Statement object from our DB connection con 10 Statement statement = con.createStatement( ); © Clear View Training 2005 v1.3 14
  • 15. Example – creating a table 1 import java.sql.*; 2 class CreateProductTable 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 String url = "jdbc:db2:TEST"; 10 Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" ); 11 Statement statement = con.createStatement(); 12 String createProductTable = "CREATE TABLE PRODUCT " + 13 "(NAME VARCHAR(64), " + 14 "ID VARCHAR(32) NOT NULL, " + 15 "PRICE FLOAT, " + 16 "DESC VARCHAR(256), " + 17 "PRIMARY KEY(ID))"; 18 statement.executeUpdate( createProductTable ); 19 } catch( Exception e ) { e.printStackTrace(); } 20 } 21 } © Clear View Training 2005 v1.3 15
  • 16. executeUpdate(String sql) Use the executeUpdate() method of the Statement object to execute DDL and SQL commands that update a table (INSERT, UPDATE, DELETE): 12 String createProductTable = "CREATE TABLE PRODUCT " + 13 "(NAME VARCHAR(64), " + 14 "ID VARCHAR(32) NOT NULL, " + 15 "PRICE FLOAT, " + 16 "DESC VARCHAR(256), " + 17 "PRIMARY KEY(ID))"; 18 statement.executeUpdate( createProductTable ); Be careful to always put spaces in the SQL string at the right places! © Clear View Training 2005 v1.3 16
  • 17. Example: inserting rows 1 import java.sql.*; 2 class InsertProducts 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 String url = "jdbc:db2:TEST"; 10 Connection con = DriverManager.getConnection( url, "db2admin", " db2admin " ); 11 Statement statement = con.createStatement(); 12 statement.executeUpdate("INSERT INTO PRODUCT " + 13 "VALUES ( 'UML User Guide', " + 14 "'0-201-57168-4', 47.99, 'The UML user guide')" ); 15 statement.executeUpdate("INSERT INTO PRODUCT " + 16 "VALUES ( 'Java Enterprise in a Nutshell', " + 17 "'1-56592-483-5', 29.95, 'A good introduction to J2EE')" ); 18 con.close(); 19 statement.close(); 20 }catch( Exception e ) { e.printStackTrace(); } 21 } 22 } © Clear View Training 2005 v1.3 17
  • 18. executeQuery(String sql) We use the executeQuery(…) method of the Statement object to execute a SQL statement that returns a single ResultSet: 11 ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); Typically, the SQL statement is a SQL SELECT executeQuery(…) always returns a ResultSet, never null. However, the ResultSet may be empty © Clear View Training 2005 v1.3 18
  • 19. Example: selecting rows 1 import java.sql.*; 2 class SelectProducts 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); 10 Statement statement = con.createStatement(); 11 ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); 12 while ( rs.next( ) ) 13 { 14 String name = rs.getString( "NAME" ); 15 float price = rs.getFloat( "PRICE" ); 16 System.out.println("Name: "+name+", price: "+price); 17 } 18 statement.close(); 19 con.close(); 20 } catch( Exception e ) { e.printStackTrace(); } 21 } 22 } © Clear View Training 2005 v1.3 19
  • 20. ResultSet ResultSet objects provide access to a table usually they provide access to the pseudo table that is the result of a SQL query ResultSet objects maintain a cursor pointing to the current row of data this cursor initially points before the first row and is moved to the first row by the next() method 11 ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); 12 while ( rs.next( ) ) 13 { 14 String name = rs.getString( "NAME" ); 15 float price = rs.getFloat( "PRICE" ); 16 System.out.println("Name: "+name+", price: "+price); 17 } © Clear View Training 2005 v1.3 20
  • 21. JDBC 2.0 Types of ResultSet Statement statement = con.createStatement( type, concurrency); Depending on the parameters passed into the Connection.createStatement(…) method, we can get a total of 6 different types of ResultSet returned! Passing no arguments to createStatement() gives a default forward-only read-only ResultSet We’ll look at the possible values for type and concurrency next… © Clear View Training 2005 v1.3 21
  • 22. JDBC 2.0 type type = semantics ResultSet.TYPE_SCROLL_SENSITIVE Scrollable. Reflects changes made to the underlying data ResultSet.TYPE_SCROLL_INSENSITIVE Scrollable. Does not reflect changes made to the underlying data ResultSet.TYPE_FORWARD_ONLY Not scrollable. Does not reflect changes made to the underlying data N.B. Scrollable means that we can navigate forwards and backwards through the ResultSet © Clear View Training 2005 v1.3 22
  • 23. JDBC 2.0 concurrency concurrency = semantics ResultSet.CONCUR_READ_ONLY the ResultSet may not be updated ResultSet.CONCUR_UPDATABLE the ResultSet may be updated © Clear View Training 2005 v1.3 23
  • 24. getXXX(…) methods see notes! The ResultSet has a wide range of methods to return SQL types such as VARCHAR as equivalent Java types For example rs.getString(“NAME”) returns the product name as a String in fact, we can get any of the SQL types with getString(…) and it will automatically be converted to a String The getXXX(…) methods can take a column name or the number of the column column numbers start at 1 and go from left to right © Clear View Training 2005 v1.3 24
  • 25. JDBC 2.0 ResultSet navigation methods Method Semantics first() Moves cursor to first row last() Moves cursor to last row next() Moves cursor to next row previous() Moves cursor to previous row beforeFirst() Moves cursor to just before the first row afterLast() Moves cursor to just after the last row absolute(int) Moves cursor to a row index. If positive – counting from the front, if negative – from the back relative(int) Moves cursor a relative number of rows, positive or negative from the current position © Clear View Training 2005 v1.3 25
  • 26. Working with ResultSets We can limit the number of rows that a ResultSet can contain by using: Statement statement = con.createStatement(); statement.setMaxRows(100); If a Statement returns multiple ResultSets, then we can move to the next ResultSet as follows: while ( statement.getMoreResults() ) { rs = statement. getResultSet(); … © Clear View Training 2005 v1.3 26
  • 27. JDBC 2.0 Updateable ResultSet If the statement is created to be of type ResultSet.CONCUR_UPDATABLE, then we may be able to update the database by modifying the ResultSet itself this may not be supported by all DBMSs as it is not a mandatory requirement for JDBC 2.0 compatibility © Clear View Training 2005 v1.3 27
  • 28. JDBC 2.0 updateXXX(…) methods Like the getXXX(…) methods, the ResultSet has a wide range of updateXXX(…) methods to change the value of SQL types in the ResultSet For example rs.updateString(“PRICE”, 40.0F) changes the price of a product we have to be very careful that that all the types in an update expression match The updateXXX(…) methods can take a column name or the number of the column column numbers start at 1 and go from left to right © Clear View Training 2005 v1.3 28
  • 29. JDBC 2.0 Updating a row This is a three step procedure: navigate to the appropriate row using a SELECT and ResultSet navigation methods update the field values in the ResultSet write the change back to the DB rs.first(); rs.updateFloat("PRICE", 40.0F); rs.updateRow(); © Clear View Training 2005 v1.3 29
  • 30. JDBC 2.0 Inserting a row This is a three step procedure: navigate to insert row update the field values in the ResultSet write the row to the DB rs.moveToInsertRow(); rs.updateString("NAME", "UML Distilled"); rs.updateString("ID", "0-201-32563-2"); rs.updateFloat("PRICE", 40.0F); rs.insertRow(); © Clear View Training 2005 v1.3 30
  • 31. JDBC 2.0 Deleting a row This is a simple two step procedure: navigate to row to be deleted delete the row rs.last(); rs.deleteRow(); © Clear View Training 2005 v1.3 31
  • 32. Prepared statements If we want to execute the same SQL statement several times, we can create a PreparedStatement object: at the point of creation of a PreparedStatement object the SQL code is sent to the DB and compiled. Subsequent executions may therefore be more efficient than normal statements PreparedStatements can take parameters © Clear View Training 2005 v1.3 32
  • 33. Prepared statement example 1 import java.sql.*; 2 class PreparedStatementTest 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); 10 PreparedStatement findBooks = con.prepareStatement( 11 "SELECT NAME FROM PRODUCT WHERE NAME LIKE ? " ); 12 findBooks.setString( 1, "%Java%" ); 13 ResultSet rs = findBooks.executeQuery(); 14 while ( rs.next() ) 15 { System.out.println("Name: "+ rs.getString( "NAME" ) ); } 16 findBooks.setString( 1, "%UML%" ); 17 rs = findBooks.executeQuery(); 19 while ( rs.next() ) 20 { System.out.println("Name: "+ rs.getString( "NAME" ) ); } 21 findBooks.close(); 22 con.close(); 23 } catch( Exception e ) { e.printStackTrace(); } 24 } 25 } © Clear View Training 2005 v1.3 33
  • 34. Transactions Normally each SQL statement will be committed automatically when it has completed executing (auto commit is on) A group of statements can be committed together by turning auto commit off, and explicitly committing the statements ourselves This ensures that if any of the statements fail, they all fail. We can then roll back the transaction © Clear View Training 2005 v1.3 34
  • 35. JDBC transaction modes con.setTransactionIsolation( mode ) TRANSACTION_NONE transactions are disabled or not supported TRANSACTION_READ_UNCOMITTED other transactions may see the results before the transaction is committed “dirty read” - uncommitted rows might be rolled back if the transaction fails. TRANSACTION_READ_COMMITTED dirty reads are not allowed. TRANSACTION_REPEATABLE_READ if a transaction performs multiple reads on a row that is being changed by another transaction, then it does not see the changes TRANSACTION_SERIALIZABLE same as TRANSACTION_REPEATABLE_READ but also protects against row insertions if a transaction does a read, another transaction inserts a row, and the first transaction does another read, the first transaction does not see the new row. © Clear View Training 2005 v1.3 35
  • 36. Transaction example 1 import java.sql.*; 2 class TransactionTest 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 String url = "jdbc:db2:TEST"; 10 Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" ); 11 Statement s = con.createStatement(); 12 try 13 { 14 con.setAutoCommit( false ); 15 s.executeUpdate("UPDATE PRODUCT SET PRICE = 40.00 WHERE ID = '0-201-57168-4' " ); 16 s.executeUpdate( 17 "UPDATE REVIEW SET COMMENT = 'Now on sale!' WHERE BOOKID = '0-201-57168-4' " ); 18 con.commit(); 19 }catch( SQLException e ) { con.rollback(); } 20 finally{ con.close(); s.close(); } 21 }catch( Exception e ){ e.printStackTrace(); } 22 } 23 } © Clear View Training 2005 v1.3 36
  • 37. JDBC 2.0 Batch updates JDBC 1.0 was very inefficient for loading a lot of data into a DB - a separate SQL command had to be executed for each record changed JDBC 2.0 allows batch updates multiple statements can be executed as a single batch we can roll back the whole batch if a single statement fails We simply add statements to be batched to a Statement or PreparedStatement object using addBatch()! We can remove the statements using clearBatch() © Clear View Training 2005 v1.3 37
  • 38. JDBC 2.0 Batch update example 1 import java.sql.*; 2 class BatchInsertProducts 3 { 4 public static void main(java.lang.String[ ] args) throws SQLException, ClassNotFoundException 5 { 6 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 7 String url = "jdbc:db2:TEST"; 8 Connection con = DriverManager.getConnection( url, "db2admin", "db2admin" ); 9 Statement s = con.createStatement(); 10 try 11 { 12 con.setAutoCommit( false ); 13 s.addBatch("INSERT INTO PRODUCT " + "VALUES ( 'The Object Constraint Language', " + 15 "'0-201-37940-4', 29.95, 'All about constraints')" ); 16 s.addBatch("INSERT INTO PRODUCT " + "VALUES ( 'The Rational Unified Process', " + 18 "'0-201-60459-0',29.95, 'A good introduction to RUP')" ); 19 int[ ] count = s.executeBatch( ); 20 con.commit( ); 21 22 }catch( SQLException e ) { con.rollback( ); } 23 finally{ con.close( ); s.close( ); } 24 } 25 } © Clear View Training 2005 v1.3 38
  • 39. Stored procedures The syntax for defining a stored procedure is different for each DBMS use the stored procedure tools that come with the RDBMS The syntax for calling a stored procedure is different for each DBMS JDBC defines a special escape sequence syntax that allows stored procedures to be called in the same way on any RDBMS © Clear View Training 2005 v1.3 39
  • 40. Escape sequences {?= call <procedure-name>(<arg1>,<arg2>, …)} {call <procedure-name>(<arg1>,<arg2>, …)} The ? represents a return value <procedure-name> is the name of the stored procedure <arg1> etc. are the arguments passed into and out of the stored procedure © Clear View Training 2005 v1.3 40
  • 41. Stored procedure example 1 import java.sql.*; 2 class StoredProcedureExample 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " ); 10 CallableStatement cs = con.prepareCall("{call DB2ADMIN.ALLPRODUCTS}"); 11 cs.execute(); 12 ResultSet rs = cs.getResultSet(); 13 while ( rs.next() ) 14 15 { String name = rs.getString( "NAME" ); create a callable 16 float price = rs.getFloat( "PRICE" ); statement 17 System.out.println("Name: "+name+", price: "+price); 18 } 19 con.close(); 20 cs.close(); 21 }catch( Exception e ){ e.printStackTrace(); } 22 } 23 } © Clear View Training 2005 v1.3 41
  • 42. Using input parameters 1 import java.sql.*; 2 class StoredProcedureParameterExample 3 { 4 public static void main(java.lang.String[ ] args) 5 { 6 try 7 { 8 Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" ); 9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", "db2admin" ); 10 CallableStatement cs = con.prepareCall("{call DB2ADMIN.FINDPROD2(?)}"); 11 cs.setString( 1, "%UML%" ); 12 cs.execute(); 13 ResultSet rs = cs.getResultSet(); set the 14 while ( rs.next() ) parameter value we specify a 15 { 16 String name = rs.getString( "NAME" ); single parameter 17 float price = rs.getFloat( "PRICE" ); 18 System.out.println("Name: "+name+", price: "+price); 19 } 20 con.close(); 21 cs.close(); 22 }catch( Exception e ){ e.printStackTrace(); } 23 } 24 } © Clear View Training 2005 v1.3 42
  • 43. Metadata JDBC has facilities to get information about a ResultSet or DB for a ResultSet, this information may include the number and names of the columns, the types of the columns etc. for a DB this information may include the name of the driver, the DB URL etc. This information about a ResultSet or DB is known as metadata See the following classes for details: ResultSet – see ResultSetMetadata Database – see DatabaseMetadata © Clear View Training 2005 v1.3 43
  • 44. Getting metadata Getting database metadata: Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", "db2admin" ); DatabaseMetaData dmd = con.getMetaData( ); Getting ResultSet metadata: Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); ResultSetMetaData rsmd = rs.getMetaData( ); © Clear View Training 2005 v1.3 44
  • 45. Summary We have looked at: 4 step approach to JDBC Connection drivers Statement PreparedStatement batch update transactions CallableStatement (stored procedures) ResultSet handling Metadata © Clear View Training 2005 v1.3 45
  • 46. Appendix: IBM DB2 (v6) © Clear View Training 2005 v1.3 46
  • 47. Installing the JDBC 2.0 driver To install JDBC 2.0: go to the directory sqllibjava12 run the command usejdbc2 To switch back to 1.2.2: go to the directory sqllibjava12 run the command usejdbc1 © Clear View Training 2005 v1.3 47