Download presentation
Presentation is loading. Please wait.
1
1 JDBC Java Database Connectivity
2
2 Agenda Relational Database Model Structured Query Language JDBC API Overview JDBC Architecture JDBC Features Using JDBC API
3
3 Relational Database Model Database models Hierarchal, network, relational (most popular) Focus on relational Relational Database Model Logical representation of data Consider relationships between data Not concerned with implementation
4
4 Relational Database Model Relational database Composed of tables Rows called records Columns are fields (attributes) First field usually primary key Unique for each record Primary key can be more than one field (column) Primary key not required
5
5 Relational Database Model NumberNameDepartmentSalaryLocation 23603 24568 35761 34589 47132 78321 JONES, A. KERWIN, R. LARSON, P. MYERS, B. NEUMANN, C. STEPHENS, T. 413 642 611 413 611 1100 2000 1800 1400 9000 8000 NEW JERSEY LOS ANGELES ORLANDO NEW JERSEY ORLANDO Table: Employee A record A columnPrimary Key Relational Database Structure
6
6 Relational Database Overview Books.mdb database Structure: Primary key in bold Rule of Entity Integrity Every record has unique entry in primary key field
7
7 Structured Query Language Overview of SQL Context of Books.mdb database SQL keywords discussed in context of complete queries Some keywords beyond scope of text Used to Query a database Insert records into a database Update existing records in a database SQL keywords SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY INSERT, UPDATE, DELETE, etc
8
8 Structured Query Language Example SQL Query: SELECT * FROM Titles WHERE Title LIKE '*How to Program' ORDER BY Title ASC SQL Result:
9
9 JDBC – API Overview JDBC API makes it possible to do three things: Establish a connection with a database or access any tabular data source Send SQL statements Process the results
10
10 JDBC Architecture for Java Application Type 1 Type 2
11
11 JDBC Architecture for Java Applet Type 4 Type 3
12
12 JDBC Features Leverage Existing Enterprise Data Simplified Enterprise Development : Easy to use API Zero Configuration for Network Computers Full Access to Metadata No Installation Database Connection Identified by URL Supported by many industry
13
13 JDBC Features From java.sql.*: (standard) Scrollable result set: MoveNext, MovePrev Updatable result set Supported BLOB and CLOB Batch updates: performance improvement, sending multiple updated instead of single updated to DB Savepoints: Ability to roll transactions back to where a savepoint is set From javax.sql.* (optional): Connection pooling Distributed transactions JNDI support
14
14 Using JDBC API Setup Database and JDBC Driver Ex: Books.mdb using JdbcOcbd bridge Loading Driver Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Making Connection Connection con = DriverManager.getConnection(“jdbc:odbc:books”, “userName”, “password”); Send/Execute Query Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(“SELECT * from Authors”);
15
15 The data source must be registered with system. Go to Control Panel -> ODBC Data Source Administrator. This allows us to register our User Data Source Name. Go to the User DSN tab and click Add... We are using Access, so select Microsoft Access Driver, then Finish Setup dialog appears. Enter name used to reference database and description (optional). Use Select... to choose database file. Use Advanced... to create a username ( anonymous ) and password ( guest ). When done, click OK ODBC Data Source Administrator now has Books. We can now access ODBC data source using JDBC to ODBC driver. Setup Books.mdb Database
16
16 Statement for SELECT Query For Forward Only and Read Only ResultSet Statement stmf = con.createStatement(); For Updateable ResultSet (JDBC 2.0) Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
17
17 ResultSet Record Navigation Record Navigation MoveNext next(); MovePrev previous(); Last Record afterLast(); isAfterLast() First Record beforeFirst(); isBeforeFirst() Go to N position absolute(n), relative(n) Record Count int recCount = rs.getRow();
18
18 First Sample Perform query on Books.mdb database Connect to database Query to Table “Authors” Display results
19
19 Authors table Four fields AuthorID - ID number FirstName LastName YearBorn First Sample
20
20 1// Fig. 18.24: TableDisplay.java 2// This program displays the contents of the Authors table 3// in the Books database. 4 4import java.sql.*; 5import javax.swing.*; 6import java.awt.*; 7import java.awt.event.*; 8import java.util.*; 9 10public class TableDisplay extends JFrame { 11 private Connection connection; 12 private JTable table; 13 14 public TableDisplay() 15 { 16 // The URL specifying the Books database to which 17 // this program connects using JDBC to connect to a 18 // Microsoft ODBC database. 19 19 String url = "jdbc:odbc:Books"; 20 String username = "anonymous"; 21 String password = "guest"; 22 23 // Load the driver to allow connection to the database 24 try { 25 25 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 26 27 27 connection = DriverManager.getConnection( 28 url, username, password ); Import the sql package. Specify url, username, and password. The database has password protection (next section). Load class definition for database driver ( static method Class.forName ). Attempt to connect to database. Use static method getConnection, of class DriverManager ( java.sql ).
21
21 29 } 30 catch ( ClassNotFoundException cnfex ) { 31 System.err.println( 32 "Failed to load JDBC/ODBC driver." ); 33 cnfex.printStackTrace(); 34 System.exit( 1 ); // terminate program 35 } 36 catch ( SQLException sqlex ) { 37 System.err.println( "Unable to connect" ); 38 sqlex.printStackTrace(); 39 } 40 41 getTable(); 42 43 setSize( 450, 150 ); 44 show(); 45 } 46 47 private void getTable() 48 { 49 Statement statement; 50 ResultSet resultSet; 51 52 try { 53 String query = "SELECT * FROM Authors"; 54 55 55 statement = connection.createStatement(); 56 56 resultSet = statement.executeQuery( query ); Create a Statement object that will query the database. Returns a ResultSet object containing results.
22
22 57 displayResultSet( resultSet ); 58 58 statement.close(); 59 } 60 catch ( SQLException sqlex ) { 61 sqlex.printStackTrace(); 62 } 63 } 64 65 private void displayResultSet( ResultSet rs ) 66 throws SQLException 67 { 68 // position to first record 69 boolean moreRecords = rs.next(); 70 71 // If there are no records, display a message 72 if ( ! moreRecords ) { 73 JOptionPane.showMessageDialog( this, 74 "ResultSet contained no records" ); 75 setTitle( "No records to display" ); 76 return; 77 } 78 79 setTitle( "Authors table from Books" ); 80 81 81 Vector columnHeads = new Vector(); 82 Vector rows = new Vector(); 83 84 try { 85 // get column heads 86 86 ResultSetMetaData rsmd = rs.getMetaData(); statement closed when not needed. Positions to first record in ResultSet (initially before first record). Create new Vector s, similar to dynamic arrays. Get meta data, which describes contents of ResultSet.
23
23 87 88 for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) 89 89 columnHeads.addElement( rsmd.getColumnName( i ) ); 90 91 // get row data 92 do { 93 93 rows.addElement( getNextRow( rs, rsmd ) ); 94 } while ( rs.next() ); 95 96 // display table with ResultSet contents 97 97 table = new JTable( rows, columnHeads ); 98 JScrollPane scroller = new JScrollPane( table ); 99 getContentPane().add( 100 scroller, BorderLayout.CENTER ); 101 validate(); 102 } 103 catch ( SQLException sqlex ) { 104 sqlex.printStackTrace(); 105 } 106 } 107 108 private Vector getNextRow( ResultSet rs, 109 ResultSetMetaData rsmd ) 110 throws SQLException 111 { 112 112 Vector currentRow = new Vector(); 113 Get names of column heads, add to Vector. Utility method getNextRow returns a Vector with row data. Creates a Vector of Vector s (like double scripted array). Create a JTable, takes Vector of Vector s and Vector of column heads. Create Vector to hold one row of data.
24
24 114 for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) 115 115 switch( rsmd.getColumnType( i ) ) { 116 case Types.VARCHAR: 117 currentRow.addElement( rs.getString( i ) ); 118 break; 119 case Types.INTEGER: 120 currentRow.addElement( 121 new Long( rs.getLong( i ) ) ); 122 break; 123 default: 124 System.out.println( "Type was: " + 125 rsmd.getColumnTypeName( i ) ); 126 } 127 128 return currentRow; 129 } 130 131 public void shutDown() 132 { 133 try { 134 connection.close(); 135 } 136 catch ( SQLException sqlex ) { 137 System.err.println( "Unable to disconnect" ); 138 sqlex.printStackTrace(); 139 } 140 } 141 Test for column type, add appropriate type of element to Vector.
25
25 142 public static void main( String args[] ) 143 { 144 final TableDisplay app = new TableDisplay(); 145 146 app.addWindowListener( 147 new WindowAdapter() { 148 public void windowClosing( WindowEvent e ) 149 { 150 app.shutDown(); 151 System.exit( 0 ); 152 } 153 } 154 ); 155 } 156}
26
26 Update Query For INSERT, DELETE, UPDATE use: stmt.executeUpdate(“DELETE from Authors where YearBorn=1946”); Bacth Update (JDBC 2.0): Statement stmt = con.createStatement(); con.setAutoCommit(false); stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')"); stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')"); int [] updateCounts = stmt.executeBatch();
27
27 Using Transaction Transaction processing Changes can be undone Interface Connection Method setAutoCommit true - each SQL statements performed individually false - several statements grouped as a transaction Terminating Statement that executes SQL statements Method commit - commit changes to database Method rollback - return database to previous state Method getAutoCommit Returns auto commit state
28
28 Using Transaction con.setAutoCommit(false); PreparedStatement updateSales = con.prepareStatement( "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?"); updateSales.setInt(1, 50); updateSales.setString(2, "Colombian"); updateSales.executeUpdate(); PreparedStatement updateTotal = con.prepareStatement( "UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE COF_NAME LIKE ?"); updateTotal.setInt(1, 50); updateTotal.setString(2, "Colombian"); updateTotal.executeUpdate(); con.commit(); con.setAutoCommit(true);
29
29 Reference http://java.sun.com/jdbc
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.