Object-Oriented Enterprise Application Development

62
Object-Oriented Enterprise Application Development Advanced JDBC

description

Object-Oriented Enterprise Application Development. Advanced JDBC. Topics. During this class we will examine: Statement batching DataSources Connection pooling Distributed transactions RowSets. JDBC Extensions. JDBC 2.0. JDBC 2.0 provides some standard extensions to the JDBC 1.0 API. - PowerPoint PPT Presentation

Transcript of Object-Oriented Enterprise Application Development

Page 1: Object-Oriented Enterprise Application Development

Object-Oriented Enterprise Application Development

Advanced JDBC

Page 2: Object-Oriented Enterprise Application Development

Topics

During this class we will examine:

Statement batching

DataSources

Connection pooling

Distributed transactions

RowSets

Page 3: Object-Oriented Enterprise Application Development

JDBC Extensions

Page 4: Object-Oriented Enterprise Application Development

JDBC 2.0

JDBC 2.0 provides some standard extensions to the JDBC 1.0 API.

This includes some new interfaces as well as some changes to existing ones.

Page 5: Object-Oriented Enterprise Application Development

JDBC 2.0 Goal

The goal of JDBC 2.0 are to provide additional capabilities within the JDBC API to support advanced database functionality.

Page 6: Object-Oriented Enterprise Application Development

JDBC 2.0 Features

Some of the new features of JDBC 2.0 include:

Scrollable result sets

Updateable result sets

Batch updates

New SQL3-compatible data types.

Page 7: Object-Oriented Enterprise Application Development

JDBC 2.0 & Java

Page 8: Object-Oriented Enterprise Application Development

Required Packages

JDBC 2.0 includes a new javax.sql package as well as some changes to the original java.sql package.

This new packages supports capabilities such as database connection pooling and distributed transactions.

Page 9: Object-Oriented Enterprise Application Development

Common Interfaces

We won't use all of the interfaces provided by JDBC 2.0 in this class. We'll focus on the most critical.

We’ll also revisit some of the interfaces from JDBC 1.0.

Page 10: Object-Oriented Enterprise Application Development

Result SetsRevisited

Page 11: Object-Oriented Enterprise Application Development

Enhancements

The ResultSet has been enhanced to make them scrollable and updateable.

This allows them to compete more effectively with other technologies such as the Visual Basic and PowerBuilder.

Vendors aren’t required to implement scrollable and updateable ResultSets to be JDBC 2.0 compliant.

Page 12: Object-Oriented Enterprise Application Development

Scrollability

A ResultSet can now have one (1) of four (3) possible scrolling attributes:

Forward and backward

Scroll insensitive

Scroll sensitive

Page 13: Object-Oriented Enterprise Application Development

Scroll-Sensitive

A ResultSet that’s scroll-sensitive is “live.”

As other users modify the data reflected in the ResultSet, the ResultSet can be changed to reflect the revised view of the data.

Page 14: Object-Oriented Enterprise Application Development

Scroll-Insensitive

A ResultSet that’s scroll-insensitive is a static view of the data.

If the data in the ResultSet is changed by other clients, the ResultSet isn’t updated accordingly.

Page 15: Object-Oriented Enterprise Application Development

Creating Scrollable ResultSets(1 of 3)

To create a scrollable ResultSet we use the overloaded createStatement() and prepareStatement() methods:

Statement createStatement( int resultSetType, int resultSetConcurrency)throws SQLException

PreparedStatement prepareStatement( String SQL, int resultSetType, int resultSetConcurrency)throws SQLException

Page 16: Object-Oriented Enterprise Application Development

Creating Scrollable ResultSets(2 of 3)

Legal ResultSet types include:TYPE_FORWARD_ONLY

TYPE_SCROLL_INSENSITIVE

TYPE_SCROLL_SENSITIVE

These values are defined in the ResultSet interface.

Page 17: Object-Oriented Enterprise Application Development

Creating Scrollable ResultSets(3 of 3)

Legal ResultSet concurrency include:CONCUR_READ_ONLY

CONCUR_UPDATEABLE

These values are defined in the ResultSet interface.

Page 18: Object-Oriented Enterprise Application Development

Sample Code – Query (1 of 1)1. Class.forName(

"sun.jdbc.odbc.JdbcOdbcDriver");2. conn = DriverManager.getConnection(

"jdbc:odbc:se452", "", "" );3. Statement stmt =

conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

4. ResultSet rs = stmt.executeQuery( SQL );

Page 19: Object-Oriented Enterprise Application Development

Sample Code – Prepared Query (1 of 1)1. Class.forName(

"sun.jdbc.odbc.JdbcOdbcDriver");2. conn = DriverManager.getConnection(

"jdbc:odbc:se452", "", "" );3. PreparedStatement stmt =

conn.preparedStatement( SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

4. ResultSet rs = stmt.executeQuery( );

Page 20: Object-Oriented Enterprise Application Development

Absolute Positioning

A ResultSet supports absolute positioning using the following methods:boolean absolute(int row)

boolean first()

boolean last()

void afterLast()

void beforeFirst()

Page 21: Object-Oriented Enterprise Application Development

Relative Positioning

A ResultSet supports relative positioning using the following methods:boolean relative(int row)

boolean next()

boolean previous()

Page 22: Object-Oriented Enterprise Application Development

Testing Position

A ResultSet allows you to test for various positions:boolean isAfterLast()

boolean isBeforeFirst()

boolean isFirst()

boolean isLast()

int getRow()

Page 23: Object-Oriented Enterprise Application Development

Updateability(1 of 2)

A ResultSet can be updated.

Changes made to the ResultSet object will be reflected in the underlying data store.

To be updateable, the ResultSet must have a concurrency type of CONCUR_UPDATEABLE.

Page 24: Object-Oriented Enterprise Application Development

Updateability(2 of 2)

Only queries that meet the following restrictions can have an updateable ResultSet:

The query references a single table.

The query returns the primary key.

The query returns all non-null columns that do not also have a default value.

Page 25: Object-Oriented Enterprise Application Development

Updating Rows(1 of 3)

There are methods provided for updating each particular type of column.Examples include:

void updateString(int col,String val)throws SQLException

void updateString(String col,String val)throws SQLException

Page 26: Object-Oriented Enterprise Application Development

Updating Rows(2 of 3)

Although the data in the row has been changed, those changes haven’t yet been pushed out to the database.

To save the changes to the underlying data store, use the updateRow() method.

void updateRow()throws SQLException

Page 27: Object-Oriented Enterprise Application Development

Updating Rows(3 of 3)

If any of the positioning methods are invoked on the ResultSet prior to the call to the updateRow() method, then all changes made to that row will be discarded.

Page 28: Object-Oriented Enterprise Application Development

Deleting Rows

To delete the current row from the underlying data store, use the deleteRow() method.

void deleteRow()throws SQLException

Page 29: Object-Oriented Enterprise Application Development

Inserting Rows(1 of 5)

Inserting a new row consists of four (4) steps:

Call the moveToInsertRow() method

Update the columns within the new row

Call the insertRow() method

Returning to the original row in the ResultSet

Page 30: Object-Oriented Enterprise Application Development

Inserting Rows(2 of 5)

First call the the moveToInsertRow() method.

This creates a new “buffer” area within the ResultSet for the new row.

It isn’t legal to call the updateRow() or deleteRow() method while the cursor is positioned on the insert row.

Page 31: Object-Oriented Enterprise Application Development

Inserting Rows(3 of 5)

Next use the same update() methods used to update the ResultSet.

This sets the various data members within the new row.

If you navigate off of this new row, your changes will be discarded.

Page 32: Object-Oriented Enterprise Application Development

Inserting Rows(4 of 5)

Next call the insertRow() method.This performs the physical insertion of the row into the underlying data store.

Any values that haven’t been set on columns in the ResultSet are assumed to be null and will be interpreted that way by the data store.

Page 33: Object-Oriented Enterprise Application Development

Inserting Rows(5 of 5)

Finally call the moveToCurrentRow() method.

This returns you to the row on which you were positioned prior to beginning the insertion process.

Page 34: Object-Oriented Enterprise Application Development

Batch Updates

Page 35: Object-Oriented Enterprise Application Development

Features(1 of 2)

A batch update allows multiple statements to be executed against the database at one time.

These statements are not executed as part of the same transaction unless setAutoCommit() has been invoked with a value of false.

Page 36: Object-Oriented Enterprise Application Development

Features(2 of 2)

Batch updates are not meant for SQL select operations.

To construct a batch, use the addBatch() methods:

void addBatch(String SQL)throws SQLException

void addBatch()throws SQLException

Page 37: Object-Oriented Enterprise Application Development

Sample Code – Batch (1 of 2)1. import java.sql.*;

2. public class Batch {3. public static

void main(String [] args) {4. Class.forName("JData2_0.sql.$Driver");5. Connection conn =

DriverManager.getConnection( "jdbc:JDataConnect://localhost/se452");

6. Statement stmt = conn.createStatement();

Page 38: Object-Oriented Enterprise Application Development

Sample Code – Batch (2 of 2)7. stmt.addBatch(

"insert into STATE values ('SK','Ski')");8. stmt.addBatch(

"insert into STATE values ('FD','Fre')");

9. int [] rows = stmt.executeBatch();

10. System.out.println("1st: " + rows[0]);11. System.out.println("2nd: " + rows[1]);

12. stmt.close();13. conn.close();14. }15. }

Page 39: Object-Oriented Enterprise Application Development

Exceptions

Each query within the batch might result in an exception.

Rather than throw a SQLException, the executeBatch() method can throw the BatchUpdateException.

The getUpdateCounts() method on this exception tells you how many rows were updated.

Page 40: Object-Oriented Enterprise Application Development

Database Connectivity Revisited

Page 41: Object-Oriented Enterprise Application Development

DataSources

Connection allocation in JDBC 2.0 is usually implemented using the DataSource interface.

The approach is to place the DataSource reference into a naming service.

The client application then retrieves this reference and uses it to create connections.

Page 42: Object-Oriented Enterprise Application Development

Sample Code – DataSource (1 of 1)1. import java.sql.*;2. import javax.sql.*;3. import com.NetDirect.Jdbc.*;

4. public class StateDataSource {5. public static void main(String [] args)

throws Exception {6. JDataSource jds = new JDataSource();7. jds.setURL(

"jdbc:JDataConnect://localhost/se452");8. DataSource ds = jds;9. Connection conn = ds.getConnection();10. // do database stuff….11. }12. }

Page 43: Object-Oriented Enterprise Application Development

Database Connectivity

Opening a database connection is an expensive process in terms of machine resources and wall-clock time.

As a general rule we open as few of these connections as possible.

With JDBC 2.0 we can create a connection pool that allows us to reuse connections.

Page 44: Object-Oriented Enterprise Application Development

Connection Pool API

The javax.sql package defines several new interfaces to support the use of connection pools:ConnectionPoolDataSourcePoolableConnectionConnectionEventListener

The use of these interfaces is vendor specific.

Page 45: Object-Oriented Enterprise Application Development

Connection Pooling(1 of 2)

Provides a cache, or pool, of prefabricated database connections.

When a client needs a database connection, it goes to the pool.

When the client is done with the connection, that connection is returned to the pool.

Page 46: Object-Oriented Enterprise Application Development

Connection Pooling(2 of 2)

Pools increase performance by avoiding the cost of creating new connections for each client.

Pools decrease resource usage by using a small number of connections to service a large number of clients.

Page 47: Object-Oriented Enterprise Application Development

Transactions Revisited

Page 48: Object-Oriented Enterprise Application Development

Defined

A distributed transaction is one that spans two (2) or more DataSource references.

Such transactions make use of middle-tier software called a transaction manager.

This manager takes over the responsibility for transaction demarcation. This makes it illegal for a developer to provide their own transaction support.

Page 49: Object-Oriented Enterprise Application Development

Distributed Transaction API

The javax.sql package defines several interfaces to support distributed transactions:XADataSourceXAConnectionDataSource

The use of these interfaces is vendor specific.

Page 50: Object-Oriented Enterprise Application Development

Participants(1 of 3)

A resource is some participant that has transactional state.

Examples include:Database connectionsJMS message queue connections

Our application objects typically don't have transactional state unless we implement it programmatically.

Page 51: Object-Oriented Enterprise Application Development

Participants(2 of 3)

A resource manager is some participant that controls and manages some resource.

Examples include:DriverManager referencesDataSource references

The resource manager will ultimately be responsible for instructing a given resource to perform its transactional processing.

Page 52: Object-Oriented Enterprise Application Development

Participants(3 of 3)

A transaction manager is some participant that controls and manages a transaction across multiple resource managers.

By interacting with the transaction manager we can control the scope and duration of a distributed transaction.

Page 53: Object-Oriented Enterprise Application Development

JTA and JTS

When building a transaction service, a vendor may choose to provide implementations of:

JTA – Java Transaction API

JTS – Java Transaction Service

Page 54: Object-Oriented Enterprise Application Development

RowSets

Page 55: Object-Oriented Enterprise Application Development

RowSet API

The javax.sql package defines several interfaces to support RowSets:RowSet

RowSetInternal

RowSetListener

RowSetMetaData

RowSetReader

RowSetWriter

Page 56: Object-Oriented Enterprise Application Development

Features(1 of 2)

A RowSet is an extension of a ResultSet that provides data in accordance with the JavaBeans API.

This class won't provide an in-depth examination of JavaBeans.

We'll see them again briefly in our discussions of JavaServer Pages.

Page 57: Object-Oriented Enterprise Application Development

Features(2 of 2)

A RowSet can be registered with a RowSetListener object.

Such a listener can report on changes to the RowSet such as:

Database cursor movement

Single-row changes

RowSet changes

Page 58: Object-Oriented Enterprise Application Development

Sample Code – RowSet (1 of 2)1. import java.sql.*;2. import javax.sql.*;3. import com.NetDirect.Jdbc.*;

4. public class StateRowSet {5. public static void main(String [] args)

throws Exception {6. JDBCRowset jrs = new JDBCRowset();7. jrs.setCommand("SELECT * FROM STATE");8. jrs.setUrl(

"jdbc:JDataConnect://localhost/se452");

9. jrs.execute();

Page 59: Object-Oriented Enterprise Application Development

Sample Code – RowSet (2 of 2)10. while ( jrs.next() ) {11. System.out.println("STATE_I: " +

jrs.getString("STATE_I"));12. System.out.println("STATE_M: " +

jrs.getString("STATE_M"));13. }14. jrs.close();15. }16. }

Page 60: Object-Oriented Enterprise Application Development

Review

During this class we have discussed:

Statement batching

DataSources

Connection pooling

Distributed transactions

RowSets

Page 61: Object-Oriented Enterprise Application Development

Resources

JDBC Database Access with JavaGraham Hamilton, Rick Cattell, Maydene Fisher, Addison-Wesley, 1997.ISBN: 0-201-30995-5

Database Programming with JDBC and Java, 2nd EditionGeorge Reese, O’Reilly, Inc., 2000.ISBN: 1-56592-616-1

Page 62: Object-Oriented Enterprise Application Development

Coming Attractions

Next week we'll begin looking at Servlets.

Please read Chapters 1-2 in your text.