java arlow jdbc tutorial(java programming tutorials)
DESCRIPTION
Java programming presentations By Daroko blog Do not just read java as a programmer, find projects and start making some Money, at DAROKO BLOG,WE Guide you through what you have learned in the classroom to a real business Environment, find java applications to a real business Environment, find also all IT Solutions and How you can apply them, find the best companies where you can get the IT jobs worldwide, Find java contract, Complete and start making some cash, find clients within your Country, refer and get paid when you complete the work. Not Just a contact, at daroko Blog (www.professionalbloggertricks.com/),you are also being taught how you can apply all IT related field in real world. Simply Google, Daroko Blog or visit (www.professionalbloggertricks.com/) to Know More about all these service now. Do not just learn and go, apply them in real world.TRANSCRIPT
![Page 1: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/1.jpg)
© Clear View Training 2005 v1.3 1
JDBC
Dr. Jim ArlowClear View Training Limitedwww.clearviewtraining.com
![Page 2: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/2.jpg)
© Clear View Training 2005 v1.3 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 [email protected]
![Page 3: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/3.jpg)
© Clear View Training 2005 v1.3 3
What is JDBCJDBC, often known as Java Database Connectivity, provides a Java API for updating and querying relational databases using Structured Query Language (SQL)JDBC is now at version 2.0, although many databases don’t as yet support all of the JDBC 2.0 features!
Java Application or Applet
JDBC
RDBMS
![Page 4: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/4.jpg)
© Clear View Training 2005 v1.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
Execute a SQL statement
Process the result
Close the connection to the DB
We’ll look ateach of thefour stepsin detail!
![Page 5: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/5.jpg)
© Clear View Training 2005 v1.3 5
Example JDBC program1. open connection to DB2. execute SQL statement3. process result4. close connection to DB
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 } 21 catch( Exception e ) { e.printStackTrace( ); } 22 } 23 }
12
3
4
![Page 6: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/6.jpg)
© Clear View Training 2005 v1.3 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 DBopening the connection itself
![Page 7: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/7.jpg)
© Clear View Training 2005 v1.3 7
Loading a driver
The first step in using JDBC is to load a driver. Here are some examples:
Class.forName( "COM.ibm.db2.jdbc.app.DB2Driver" );
Class.forName( "sun.jdbc.JdbcOdbcDriver" );
The IBM DB2 driver:
The SUN JDBC/ODBC Bridge driver:
![Page 8: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/8.jpg)
© Clear View Training 2005 v1.3 8
There are 4 categories of driverType 1 JDBC-ODBC Bridge (Native Code)
provides a Java bridge to ODBCimplemented 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 wrappercan 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
![Page 9: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/9.jpg)
© Clear View Training 2005 v1.3 9
Type 1 JDBC-ODBC BridgeProvides a Java bridge to ODBCImplemented in native code and requires some non-Java software on the clientNot a mandatory component of the JDK, and is not automatically supported by Java run-time environmentsOnly recommended for light use
Java application
ODBC driver
Type 1 JDBC/ODBC
result setSQL command
proprietary protocol
![Page 10: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/10.jpg)
© Clear View Training 2005 v1.3 10
Type 2 Native APIConverts JDBC commands into DBMS-specific native callsImplemented in native code and requires some non-Java software on the clientInterfaces directly with the DB, so has performance advantages over Type 1
Java application
Native database library
Type 2 JDBC driver
result setSQL command
proprietary protocol
![Page 11: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/11.jpg)
© Clear View Training 2005 v1.3 11
Type 3 JDBC-Net driversA three tier solutionAllows pure Java clientsCan change DBMS without affecting the client
Java application
Type 3 JDBC driver
result setSQL command
proprietary protocol most flexible
JDBC Driver
Middleware
![Page 12: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/12.jpg)
© Clear View Training 2005 v1.3 12
Type 4 Native Protocol driversNative Protocol drivers communicate directly with the DBThey convert JDBC commands directly into the DB’s native protocolNo additional transformation or middleware layers, therefore has high performance
Java application
Type 4 Pure Java
result set using proprietary protocol
SQL commandusing proprietary protocol
bestperformance
![Page 13: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/13.jpg)
© Clear View Training 2005 v1.3 13
Making a connection
Next, the driver must connect to the DBMS:
The object con gives us an open database connection
9 Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", " db2admin " );
DB URL
login password
optional
![Page 14: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/14.jpg)
© Clear View Training 2005 v1.3 14
Creating StatementsA Statement object is used to send SQL statements to the DBFirst we get a Statement object from our DB connection con
10 Statement statement = con.createStatement( );
![Page 15: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/15.jpg)
© Clear View Training 2005 v1.3 15
Example – creating a table1 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 }
![Page 16: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/16.jpg)
© Clear View Training 2005 v1.3 16
executeUpdate(String sql)Use the executeUpdate() method of the Statementobject to execute DDL and SQL commands that update a table (INSERT, UPDATE, DELETE):
Be careful to always put spaces in the SQL string at the right places!
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 );
![Page 17: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/17.jpg)
© Clear View Training 2005 v1.3 17
Example: inserting rows1 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 }
![Page 18: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/18.jpg)
© Clear View Training 2005 v1.3 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 SELECTexecuteQuery(…) always returns a ResultSet, never null. However, the ResultSet may be empty
![Page 19: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/19.jpg)
© Clear View Training 2005 v1.3 19
Example: selecting rows1 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 }
![Page 20: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/20.jpg)
© Clear View Training 2005 v1.3 20
ResultSetResultSet 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 }
![Page 21: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/21.jpg)
© Clear View Training 2005 v1.3 21
Types of ResultSet
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 ResultSetWe’ll look at the possible values for type and concurrency next…
Statement statement = con.createStatement( type, concurrency);
JDBC2.0
![Page 22: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/22.jpg)
© Clear View Training 2005 v1.3 22
type
type = semanticsResultSet.TYPE_SCROLL_SENSITIVE Scrollable. Reflects changes made to
the underlying dataResultSet.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 andbackwards through the ResultSet
JDBC2.0
![Page 23: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/23.jpg)
© Clear View Training 2005 v1.3 23
concurrency
concurrency = semantics
ResultSet.CONCUR_READ_ONLY the ResultSet may not be updated
ResultSet.CONCUR_UPDATABLE the ResultSet may be updated
JDBC2.0
![Page 24: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/24.jpg)
© Clear View Training 2005 v1.3 24
getXXX(…) methodsThe ResultSet has a wide range of methods to return SQL types such as VARCHAR as equivalent Java typesFor 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
see notes!
![Page 25: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/25.jpg)
© Clear View Training 2005 v1.3 25
ResultSet navigation methodsMethod Semantics
first() Moves cursor to first rowlast() Moves cursor to last rownext() Moves cursor to next rowprevious() Moves cursor to previous rowbeforeFirst() Moves cursor to just before the first rowafterLast() Moves cursor to just after the last rowabsolute(int) Moves cursor to a row index. If positive – counting from
the front, if negative – from the backrelative(int) Moves cursor a relative number of rows, positive or
negative from the current position
JDBC2.0
![Page 26: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/26.jpg)
© Clear View Training 2005 v1.3 26
Working with ResultSetsWe can limit the number of rows that a ResultSetcan 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(); …
![Page 27: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/27.jpg)
© Clear View Training 2005 v1.3 27
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
JDBC2.0
![Page 28: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/28.jpg)
© Clear View Training 2005 v1.3 28
updateXXX(…) methodsLike the getXXX(…) methods, the ResultSet has a wide range of updateXXX(…) methods to change the value of SQL types in the ResultSetFor 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
JDBC2.0
![Page 29: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/29.jpg)
© Clear View Training 2005 v1.3 29
Updating a row
This is a three step procedure:navigate to the appropriate row using a SELECT and ResultSet navigation methodsupdate the field values in the ResultSetwrite the change back to the DB
rs.first(); rs.updateFloat("PRICE", 40.0F); rs.updateRow();
JDBC2.0
![Page 30: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/30.jpg)
© Clear View Training 2005 v1.3 30
Inserting a rowThis is a three step procedure:
navigate to insert rowupdate the field values in the ResultSetwrite the row to the DB
JDBC2.0
rs.moveToInsertRow(); rs.updateString("NAME", "UML Distilled"); rs.updateString("ID", "0-201-32563-2"); rs.updateFloat("PRICE", 40.0F); rs.insertRow();
![Page 31: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/31.jpg)
© Clear View Training 2005 v1.3 31
Deleting a rowThis is a simple two step procedure:
navigate to row to be deleteddelete the row
JDBC2.0
rs.last(); rs.deleteRow();
![Page 32: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/32.jpg)
© Clear View Training 2005 v1.3 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 PreparedStatementobject the SQL code is sent to the DB and compiled. Subsequent executions may therefore be more efficient than normal statementsPreparedStatements can take parameters
![Page 33: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/33.jpg)
© Clear View Training 2005 v1.3 33
Prepared statement example1 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 }
![Page 34: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/34.jpg)
© Clear View Training 2005 v1.3 34
TransactionsNormally 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 ourselvesThis ensures that if any of the statements fail, they all fail. We can then roll back the transaction
![Page 35: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/35.jpg)
© Clear View Training 2005 v1.3 35
JDBC transaction modes
TRANSACTION_NONEtransactions are disabled or not supported
TRANSACTION_READ_UNCOMITTEDother transactions may see the results before the transaction is committed“dirty read” - uncommitted rows might be rolled back if the transaction fails.
TRANSACTION_READ_COMMITTEDdirty reads are not allowed.
TRANSACTION_REPEATABLE_READif a transaction performs multiple reads on a row that is being changed by another transaction, then it does not see the changes
TRANSACTION_SERIALIZABLEsame as TRANSACTION_REPEATABLE_READ but also protects against row insertionsif 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.
con.setTransactionIsolation( mode )
![Page 36: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/36.jpg)
© Clear View Training 2005 v1.3 36
Transaction example1 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 }
![Page 37: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/37.jpg)
© Clear View Training 2005 v1.3 37
Batch updatesJDBC 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 changedJDBC 2.0 allows batch updates
multiple statements can be executed as a single batchwe 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()
JDBC2.0
![Page 38: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/38.jpg)
© Clear View Training 2005 v1.3 38
Batch update example1 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 }
JDBC2.0
![Page 39: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/39.jpg)
© Clear View Training 2005 v1.3 39
Stored proceduresThe 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 syntaxthat allows stored procedures to be called in the same way on any RDBMS
![Page 40: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/40.jpg)
© Clear View Training 2005 v1.3 40
Escape sequences
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
{?= call <procedure-name>(<arg1>,<arg2>, …)} {call <procedure-name>(<arg1>,<arg2>, …)}
![Page 41: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/41.jpg)
© Clear View Training 2005 v1.3 41
Stored procedure example1 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" ); 16 float price = rs.getFloat( "PRICE" ); 17 System.out.println("Name: "+name+", price: "+price); 18 } 19 con.close(); 20 cs.close(); 21 }catch( Exception e ){ e.printStackTrace(); } 22 } 23 }
create a callable statement
![Page 42: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/42.jpg)
© Clear View Training 2005 v1.3 42
Using input parameters1 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(); 14 while ( rs.next() ) 15 { 16 String name = rs.getString( "NAME" ); 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 }
we specify a single parameter
set the parameter value
![Page 43: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/43.jpg)
© Clear View Training 2005 v1.3 43
MetadataJDBC 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 metadataSee the following classes for details:
ResultSet – see ResultSetMetadataDatabase – see DatabaseMetadata
![Page 44: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/44.jpg)
© Clear View Training 2005 v1.3 44
Getting metadata
Getting database metadata:
Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery("SELECT NAME, PRICE FROM PRODUCT"); ResultSetMetaData rsmd = rs.getMetaData( );
Connection con = DriverManager.getConnection( "jdbc:db2:TEST", "db2admin", "db2admin" ); DatabaseMetaData dmd = con.getMetaData( );
Getting ResultSet metadata:
![Page 45: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/45.jpg)
© Clear View Training 2005 v1.3 45
SummaryWe have looked at:
4 step approach to JDBCConnectiondrivers
StatementPreparedStatementbatch updatetransactionsCallableStatement (stored procedures)
ResultSet handlingMetadata
![Page 46: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/46.jpg)
© Clear View Training 2005 v1.3 46
Appendix: IBM DB2 (v6)
![Page 47: java arlow jdbc tutorial(java programming tutorials)](https://reader033.vdocuments.net/reader033/viewer/2022052218/55496e72b4c9056e598b501a/html5/thumbnails/47.jpg)
© Clear View Training 2005 v1.3 47
Installing the JDBC 2.0 driver
To install JDBC 2.0:go to the directory sqllib\java12run the command usejdbc2
To switch back to 1.2.2:go to the directory sqllib\java12run the command usejdbc1