0
JDBC and Database Programming in Java Alexander Day Chaffee [email_address] Version 1.1, 14 Feb 98
Introduction  <ul><li>Database Access in Java </li></ul><ul><li>Find out any relevant background and interest of the audie...
Agenda <ul><li>Overview of Databases and Java </li></ul><ul><li>Overview of JDBC </li></ul><ul><li>JDBC APIs </li></ul><ul...
Overview  TCP/IP java.net RMI JDBC CORBA Network OS
Vocabulary <ul><li>Glossary of terms </li></ul><ul><li>Define the terms as used in this subject </li></ul>
Part I: Overview of Databases and Java
Databases in the Enterprise <ul><li>All corporate data stored in DB </li></ul><ul><li>SQL standardizes format (sort of) </...
Why Java? <ul><li>Write once, run anywhere </li></ul><ul><ul><li>Multiple client and server platforms </li></ul></ul><ul><...
Database Architectures <ul><li>Two-tier </li></ul><ul><li>Three-tier </li></ul><ul><li>N-tier </li></ul>
Two-Tier Architecture <ul><li>Client connects directly to server </li></ul><ul><li>e.g. HTTP, email </li></ul><ul><li>Pro:...
Three-Tier Architecture <ul><li>Application Server sits between client and database </li></ul>
Three-Tier Pros <ul><li>flexible: can change one part without affecting others </li></ul><ul><li>can connect to different ...
Three-Tier Cons <ul><li>higher complexity </li></ul><ul><li>higher maintenance </li></ul><ul><li>lower network efficiency ...
N-Tier Architecture <ul><li>Design your application using as many “tiers” as you need </li></ul><ul><li>Use Object-Oriente...
Database Technologies <ul><li>Hierarchical </li></ul><ul><ul><li>obsolete (in a manner of speaking) </li></ul></ul><ul><ul...
Relational Databases <ul><li>invented by Dr. E.F.Codd </li></ul><ul><li>data stored in  records  which live in  tables </l...
Joining Tables <ul><li>you can associate tables with one another </li></ul><ul><li>allows data to nest </li></ul><ul><li>a...
Join example <ul><li>People </li></ul><ul><ul><li>name </li></ul></ul><ul><ul><li>homeaddress </li></ul></ul><ul><ul><li>w...
SQL <ul><li>Structured Query Language </li></ul><ul><li>Standardized syntax for “querying” (accessing) a relational databa...
SQL Syntax <ul><li>INSERT INTO  table  (  field1, field2  ) VALUES (  value1, value2  ) </li></ul><ul><ul><li>inserts a ne...
Transactions <ul><li>Transaction = more than one statement which must all succeed (or all fail) together </li></ul><ul><li...
Part II: JDBC Overview
JDBC Goals <ul><li>SQL-Level </li></ul><ul><li>100% Pure Java </li></ul><ul><li>Keep it simple </li></ul><ul><li>High-perf...
JDBC Ancestry X/OPEN ODBC JDBC
JDBC Architecture <ul><li>Java code calls JDBC library </li></ul><ul><li>JDBC loads a  driver   </li></ul><ul><li>Driver t...
JDBC Drivers <ul><li>Type I: “Bridge” </li></ul><ul><li>Type II: “Native” </li></ul><ul><li>Type III: “Middleware” </li></...
JDBC Drivers (Fig.) JDBC Type I “ Bridge” Type II “ Native” Type III “ Middleware” Type IV “ Pure” ODBC ODBC Driver CLI (....
Type I Drivers <ul><li>Use bridging technology </li></ul><ul><li>Requires installation/configuration on client machines </...
Type II Drivers <ul><li>Native API drivers </li></ul><ul><li>Requires installation/configuration on client machines </li><...
Type III Drivers <ul><li>Calls middleware server, usually on database host </li></ul><ul><li>Very flexible -- allows acces...
Type IV Drivers <ul><li>100% Pure Java -- the Holy Grail </li></ul><ul><li>Use Java networking libraries to talk directly ...
JDBC Limitations <ul><li>No scrolling cursors </li></ul><ul><li>No bookmarks </li></ul>
Related Technologies <ul><li>ODBC </li></ul><ul><ul><li>Requires configuration (odbc.ini) </li></ul></ul><ul><li>RDO, ADO ...
Part III: JDBC APIs
java.sql <ul><li>JDBC is implemented via classes in the java.sql package </li></ul>
Loading a Driver Directly <ul><li>Driver d = new foo.bar.MyDriver(); </li></ul><ul><li>Connection c = d.connect(...); </li...
DriverManager <ul><li>DriverManager tries all the drivers </li></ul><ul><li>Uses the first one that works </li></ul><ul><l...
Registering a Driver <ul><li>statically load driver </li></ul><ul><li>Class.forName(“foo.bar.MyDriver”); </li></ul><ul><li...
JDBC Object Classes <ul><li>DriverManager </li></ul><ul><ul><li>Loads, chooses drivers </li></ul></ul><ul><li>Driver </li>...
JDBC Class Usage DriverManager Driver Connection Statement ResultSet
JDBC URLs <ul><li>jdbc: subprotocol : source </li></ul><ul><li>each driver has its own subprotocol </li></ul><ul><li>each ...
DriverManager <ul><li>Connection getConnection </li></ul><ul><li>(String url, String user, String password) </li></ul><ul>...
Connection <ul><li>A Connection represents a session with a specific database. </li></ul><ul><li>Within the context of a C...
Obtaining a Connection <ul><li>String url  = &quot;jdbc:odbc:Northwind&quot;; </li></ul><ul><li>try { </li></ul><ul><li>Cl...
Connection Methods <ul><li>Statement createStatement() </li></ul><ul><ul><li>returns a new Statement object </li></ul></ul...
Statement <ul><li>A Statement object is used for executing a static SQL statement and obtaining the results produced by it...
Statement Methods <ul><li>ResultSet executeQuery(String)  </li></ul><ul><ul><li>Execute a SQL statement that returns a sin...
ResultSet <ul><li>A ResultSet provides access to a table of data generated by executing a Statement.  </li></ul><ul><li>On...
ResultSet Methods <ul><li>boolean next()  </li></ul><ul><ul><li>activates the next row </li></ul></ul><ul><ul><li>the firs...
ResultSet Methods <ul><li>Type  get Type (int columnIndex) </li></ul><ul><ul><li>returns the given field as the given type...
ResultSet Methods <ul><li>String getString(int columnIndex)  </li></ul><ul><li>boolean getBoolean(int columnIndex)  </li><...
ResultSet Methods <ul><li>String getString(String columnName)  </li></ul><ul><li>boolean getBoolean(String columnName)  </...
isNull <ul><li>In SQL, NULL means the field is empty </li></ul><ul><li>Not the same as 0 or “” </li></ul><ul><li>In JDBC, ...
Sample Database <ul><li>Employee ID Last Name First Name </li></ul><ul><li>1 Davolio Nancy </li></ul><ul><li>2 Fuller Andr...
SELECT Example <ul><li>Connection con = DriverManager.getConnection(url, &quot;alex&quot;, &quot;8675309&quot;); </li></ul...
SELECT Example (Cont.) <ul><li>while (results.next()) { </li></ul><ul><li>int id = results.getInt(1); </li></ul><ul><li>St...
Mapping Java Types to SQL Types <ul><li>SQL type  Java Type </li></ul><ul><li>CHAR,  VARCHAR , LONGVARCHAR String </li></u...
Database Time <ul><li>Times in SQL are notoriously unstandard </li></ul><ul><li>Java defines three classes to help </li></...
Modifying the Database <ul><li>use executeUpdate if the SQL contains “INSERT” or “UPDATE” </li></ul><ul><li>Why isn’t it s...
INSERT example
Transaction Management <ul><li>Transactions are  not  explicitly opened and closed </li></ul><ul><li>Instead, the connecti...
setAutoCommit <ul><li>Connection.setAutoCommit(boolean) </li></ul><ul><li>if  AutoCommit  is false, then every statement i...
Connection Managers <ul><li>Hint: for a large threaded database server, create a Connection Manager object </li></ul><ul><...
Optimized Statements <ul><li>Prepared Statements </li></ul><ul><ul><li>SQL calls you make again and again </li></ul></ul><...
JDBC Class Diagram Whoa!
Metadata <ul><li>Connection: </li></ul><ul><ul><li>DatabaseMetaData getMetaData() </li></ul></ul><ul><li>ResultSet: </li><...
ResultSetMetaData <ul><li>What's the number of columns in the ResultSet?  </li></ul><ul><li>What's a column's name?  </li>...
DatabaseMetaData <ul><li>What tables are available? </li></ul><ul><li>What's our user name as known to the database?  </li...
JavaBlend: Java to Relational Mapping
JDBC 2.0 <ul><li>Scrollable result set </li></ul><ul><li>Batch updates </li></ul><ul><li>Advanced data types </li></ul><ul...
Summary <ul><li>State what has been learned </li></ul><ul><li>Define ways to apply training </li></ul><ul><li>Request feed...
Where to get more information <ul><li>Other training sessions </li></ul><ul><li>Reese,  Database Programming with JDBC and...
Upcoming SlideShare
Loading in...5
×

Jdbc

1,257

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,257
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
83
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Jdbc"

  1. 1. JDBC and Database Programming in Java Alexander Day Chaffee [email_address] Version 1.1, 14 Feb 98
  2. 2. Introduction <ul><li>Database Access in Java </li></ul><ul><li>Find out any relevant background and interest of the audience </li></ul><ul><ul><li>SQL gurus? </li></ul></ul><ul><ul><li>Visual Basic Database Forms? </li></ul></ul>
  3. 3. Agenda <ul><li>Overview of Databases and Java </li></ul><ul><li>Overview of JDBC </li></ul><ul><li>JDBC APIs </li></ul><ul><li>Other Database Techniques </li></ul>
  4. 4. Overview TCP/IP java.net RMI JDBC CORBA Network OS
  5. 5. Vocabulary <ul><li>Glossary of terms </li></ul><ul><li>Define the terms as used in this subject </li></ul>
  6. 6. Part I: Overview of Databases and Java
  7. 7. Databases in the Enterprise <ul><li>All corporate data stored in DB </li></ul><ul><li>SQL standardizes format (sort of) </li></ul>
  8. 8. Why Java? <ul><li>Write once, run anywhere </li></ul><ul><ul><li>Multiple client and server platforms </li></ul></ul><ul><li>Object-relational mapping </li></ul><ul><ul><li>databases optimized for searching/indexing </li></ul></ul><ul><ul><li>objects optimized for engineering/flexibility </li></ul></ul><ul><li>Network independence </li></ul><ul><ul><li>Works across Internet Protocol </li></ul></ul><ul><li>Database independence </li></ul><ul><ul><li>Java can access any database vendor </li></ul></ul><ul><li>Ease of administration </li></ul><ul><ul><li>zero-install client </li></ul></ul>
  9. 9. Database Architectures <ul><li>Two-tier </li></ul><ul><li>Three-tier </li></ul><ul><li>N-tier </li></ul>
  10. 10. Two-Tier Architecture <ul><li>Client connects directly to server </li></ul><ul><li>e.g. HTTP, email </li></ul><ul><li>Pro: </li></ul><ul><ul><li>simple </li></ul></ul><ul><ul><li>client-side scripting offloads work onto the client </li></ul></ul><ul><li>Con: </li></ul><ul><ul><li>fat client </li></ul></ul><ul><ul><li>inflexible </li></ul></ul>
  11. 11. Three-Tier Architecture <ul><li>Application Server sits between client and database </li></ul>
  12. 12. Three-Tier Pros <ul><li>flexible: can change one part without affecting others </li></ul><ul><li>can connect to different databases without changing code </li></ul><ul><li>specialization: presentation / business logic / data management </li></ul><ul><li>can cache queries </li></ul><ul><li>can implement proxies and firewalls </li></ul>
  13. 13. Three-Tier Cons <ul><li>higher complexity </li></ul><ul><li>higher maintenance </li></ul><ul><li>lower network efficiency </li></ul><ul><li>more parts to configure (and buy) </li></ul>
  14. 14. N-Tier Architecture <ul><li>Design your application using as many “tiers” as you need </li></ul><ul><li>Use Object-Oriented Design techniques </li></ul><ul><li>Put the various components on whatever host makes sense </li></ul><ul><li>Java allows N-Tier Architecture, especially with RMI and JDBC </li></ul>
  15. 15. Database Technologies <ul><li>Hierarchical </li></ul><ul><ul><li>obsolete (in a manner of speaking) </li></ul></ul><ul><ul><li>any specialized file format can be called a hierarchical DB </li></ul></ul><ul><li>Relational (aka SQL) (RDBMS) </li></ul><ul><ul><li>row, column </li></ul></ul><ul><ul><li>most popular </li></ul></ul><ul><li>Object-relational DB (ORDBMS) </li></ul><ul><ul><li>add inheritance, blobs to RDB </li></ul></ul><ul><ul><li>NOT object-oriented -- “object” is mostly a marketing term </li></ul></ul><ul><li>Object-oriented DB (OODB) </li></ul><ul><ul><li>data stored as objects </li></ul></ul><ul><ul><li>high-performance for OO data models </li></ul></ul>
  16. 16. Relational Databases <ul><li>invented by Dr. E.F.Codd </li></ul><ul><li>data stored in records which live in tables </li></ul><ul><li>maps row (record) to column (field) in a single table </li></ul><ul><li>“ relation” (as in “relational”) means row to column (not table to table) </li></ul>
  17. 17. Joining Tables <ul><li>you can associate tables with one another </li></ul><ul><li>allows data to nest </li></ul><ul><li>allows arbitrarily complicated data structures </li></ul><ul><li>not object-oriented </li></ul>
  18. 18. Join example <ul><li>People </li></ul><ul><ul><li>name </li></ul></ul><ul><ul><li>homeaddress </li></ul></ul><ul><ul><li>workaddress </li></ul></ul><ul><li>Addresses </li></ul><ul><ul><li>id </li></ul></ul><ul><ul><li>street </li></ul></ul><ul><ul><li>state </li></ul></ul><ul><ul><li>zip </li></ul></ul>
  19. 19. SQL <ul><li>Structured Query Language </li></ul><ul><li>Standardized syntax for “querying” (accessing) a relational database </li></ul><ul><li>Supposedly database-independent </li></ul><ul><li>Actually, there are important variations from DB to DB </li></ul>
  20. 20. SQL Syntax <ul><li>INSERT INTO table ( field1, field2 ) VALUES ( value1, value2 ) </li></ul><ul><ul><li>inserts a new record into the named table </li></ul></ul><ul><li>UPDATE table SET ( field1 = value1, field2 = value2 ) WHERE condition </li></ul><ul><ul><li>changes an existing record or records </li></ul></ul><ul><li>DELETE FROM table WHERE condition </li></ul><ul><ul><li>removes all records that match condition </li></ul></ul><ul><li>SELECT field1, field2 FROM table WHERE condition </li></ul><ul><ul><li>retrieves all records that match condition </li></ul></ul>
  21. 21. Transactions <ul><li>Transaction = more than one statement which must all succeed (or all fail) together </li></ul><ul><li>If one fails, the system must reverse all previous actions </li></ul><ul><li>Also can’t leave DB in inconsistent state halfway through a transaction </li></ul><ul><li>COMMIT = complete transaction </li></ul><ul><li>ROLLBACK = abort </li></ul>
  22. 22. Part II: JDBC Overview
  23. 23. JDBC Goals <ul><li>SQL-Level </li></ul><ul><li>100% Pure Java </li></ul><ul><li>Keep it simple </li></ul><ul><li>High-performance </li></ul><ul><li>Leverage existing database technology </li></ul><ul><ul><li>why reinvent the wheel? </li></ul></ul><ul><li>Use strong, static typing wherever possible </li></ul><ul><li>Use multiple methods to express multiple functionality </li></ul>
  24. 24. JDBC Ancestry X/OPEN ODBC JDBC
  25. 25. JDBC Architecture <ul><li>Java code calls JDBC library </li></ul><ul><li>JDBC loads a driver </li></ul><ul><li>Driver talks to a particular database </li></ul><ul><li>Can have more than one driver -> more than one database </li></ul><ul><li>Ideal: can change database engines without changing any application code </li></ul>Application JDBC Driver
  26. 26. JDBC Drivers <ul><li>Type I: “Bridge” </li></ul><ul><li>Type II: “Native” </li></ul><ul><li>Type III: “Middleware” </li></ul><ul><li>Type IV: “Pure” </li></ul>
  27. 27. JDBC Drivers (Fig.) JDBC Type I “ Bridge” Type II “ Native” Type III “ Middleware” Type IV “ Pure” ODBC ODBC Driver CLI (.lib) Middleware Server
  28. 28. Type I Drivers <ul><li>Use bridging technology </li></ul><ul><li>Requires installation/configuration on client machines </li></ul><ul><li>Not good for Web </li></ul><ul><li>e.g. ODBC Bridge </li></ul>
  29. 29. Type II Drivers <ul><li>Native API drivers </li></ul><ul><li>Requires installation/configuration on client machines </li></ul><ul><li>Used to leverage existing CLI libraries </li></ul><ul><li>Usually not thread-safe </li></ul><ul><li>Mostly obsolete now </li></ul><ul><li>e.g. Intersolv Oracle Driver, WebLogic drivers </li></ul>
  30. 30. Type III Drivers <ul><li>Calls middleware server, usually on database host </li></ul><ul><li>Very flexible -- allows access to multiple databases using one driver </li></ul><ul><li>Only need to download one driver </li></ul><ul><li>But it’s another server application to install and maintain </li></ul><ul><li>e.g. Symantec DBAnywhere </li></ul>
  31. 31. Type IV Drivers <ul><li>100% Pure Java -- the Holy Grail </li></ul><ul><li>Use Java networking libraries to talk directly to database engines </li></ul><ul><li>Only disadvantage: need to download a new driver for each database engine </li></ul><ul><li>e.g. Oracle, mSQL </li></ul>
  32. 32. JDBC Limitations <ul><li>No scrolling cursors </li></ul><ul><li>No bookmarks </li></ul>
  33. 33. Related Technologies <ul><li>ODBC </li></ul><ul><ul><li>Requires configuration (odbc.ini) </li></ul></ul><ul><li>RDO, ADO </li></ul><ul><ul><li>Requires Win32 </li></ul></ul><ul><li>OODB </li></ul><ul><ul><li>e.g. ObjectStore from ODI </li></ul></ul><ul><li>JavaBlend </li></ul><ul><ul><li>maps objects to tables transparently (more or less) </li></ul></ul>
  34. 34. Part III: JDBC APIs
  35. 35. java.sql <ul><li>JDBC is implemented via classes in the java.sql package </li></ul>
  36. 36. Loading a Driver Directly <ul><li>Driver d = new foo.bar.MyDriver(); </li></ul><ul><li>Connection c = d.connect(...); </li></ul><ul><li>Not recommended, use DriverManager instead </li></ul><ul><li>Useful if you know you want a particular driver </li></ul>
  37. 37. DriverManager <ul><li>DriverManager tries all the drivers </li></ul><ul><li>Uses the first one that works </li></ul><ul><li>When a driver class is first loaded, it registers itself with the DriverManager </li></ul><ul><li>Therefore, to register a driver, just load it! </li></ul>
  38. 38. Registering a Driver <ul><li>statically load driver </li></ul><ul><li>Class.forName(“foo.bar.MyDriver”); </li></ul><ul><li>Connection c = DriverManager.getConnection(...); </li></ul><ul><li>or use the jdbc.drivers system property </li></ul>
  39. 39. JDBC Object Classes <ul><li>DriverManager </li></ul><ul><ul><li>Loads, chooses drivers </li></ul></ul><ul><li>Driver </li></ul><ul><ul><li>connects to actual database </li></ul></ul><ul><li>Connection </li></ul><ul><ul><li>a series of SQL statements to and from the DB </li></ul></ul><ul><li>Statement </li></ul><ul><ul><li>a single SQL statement </li></ul></ul><ul><li>ResultSet </li></ul><ul><ul><li>the records returned from a Statement </li></ul></ul>
  40. 40. JDBC Class Usage DriverManager Driver Connection Statement ResultSet
  41. 41. JDBC URLs <ul><li>jdbc: subprotocol : source </li></ul><ul><li>each driver has its own subprotocol </li></ul><ul><li>each subprotocol has its own syntax for the source </li></ul><ul><li>jdbc:odbc: DataSource </li></ul><ul><ul><li>e.g. jdbc:odbc:Northwind </li></ul></ul><ul><li>jdbc:msql:// host[:port]/database </li></ul><ul><ul><li>e.g. jdbc:msql://foo.nowhere.com:4333/accounting </li></ul></ul>
  42. 42. DriverManager <ul><li>Connection getConnection </li></ul><ul><li>(String url, String user, String password) </li></ul><ul><li>Connects to given JDBC URL with given user name and password </li></ul><ul><li>Throws java.sql.SQLException </li></ul><ul><li>returns a Connection object </li></ul>
  43. 43. Connection <ul><li>A Connection represents a session with a specific database. </li></ul><ul><li>Within the context of a Connection, SQL statements are executed and results are returned. </li></ul><ul><li>Can have multiple connections to a database </li></ul><ul><ul><li>NB: Some drivers don’t support serialized connections </li></ul></ul><ul><ul><li>Fortunately, most do (now) </li></ul></ul><ul><li>Also provides “metadata” -- information about the database, tables, and fields </li></ul><ul><li>Also methods to deal with transactions </li></ul>
  44. 44. Obtaining a Connection <ul><li>String url = &quot;jdbc:odbc:Northwind&quot;; </li></ul><ul><li>try { </li></ul><ul><li>Class.forName (&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;); </li></ul><ul><li>Connection con = DriverManager.getConnection(url); </li></ul><ul><li>} </li></ul><ul><li>catch (ClassNotFoundException e) </li></ul><ul><li>{ e.printStackTrace(); } </li></ul><ul><li>catch (SQLException e) </li></ul><ul><li>{ e.printStackTrace(); } </li></ul>
  45. 45. Connection Methods <ul><li>Statement createStatement() </li></ul><ul><ul><li>returns a new Statement object </li></ul></ul><ul><li>PreparedStatement prepareStatement(String sql) </li></ul><ul><ul><li>returns a new PreparedStatement object </li></ul></ul><ul><li>CallableStatement prepareCall(String sql) </li></ul><ul><ul><li>returns a new CallableStatement object </li></ul></ul><ul><li>Why all these different kinds of statements? Optimization. </li></ul>
  46. 46. Statement <ul><li>A Statement object is used for executing a static SQL statement and obtaining the results produced by it. </li></ul>
  47. 47. Statement Methods <ul><li>ResultSet executeQuery(String) </li></ul><ul><ul><li>Execute a SQL statement that returns a single ResultSet. </li></ul></ul><ul><li>int executeUpdate(String) </li></ul><ul><ul><li>Execute a SQL INSERT, UPDATE or DELETE statement. Returns the number of rows changed. </li></ul></ul><ul><li>boolean execute(String) </li></ul><ul><ul><li>Execute a SQL statement that may return multiple results. </li></ul></ul><ul><li>Why all these different kinds of queries? Optimization. </li></ul>
  48. 48. ResultSet <ul><li>A ResultSet provides access to a table of data generated by executing a Statement. </li></ul><ul><li>Only one ResultSet per Statement can be open at once. </li></ul><ul><li>The table rows are retrieved in sequence. </li></ul><ul><li>A ResultSet maintains a cursor pointing to its current row of data. </li></ul><ul><li>The 'next' method moves the cursor to the next row. </li></ul><ul><ul><li>you can’t rewind </li></ul></ul>
  49. 49. ResultSet Methods <ul><li>boolean next() </li></ul><ul><ul><li>activates the next row </li></ul></ul><ul><ul><li>the first call to next() activates the first row </li></ul></ul><ul><ul><li>returns false if there are no more rows </li></ul></ul><ul><li>void close() </li></ul><ul><ul><li>disposes of the ResultSet </li></ul></ul><ul><ul><li>allows you to re-use the Statement that created it </li></ul></ul><ul><ul><li>automatically called by most Statement methods </li></ul></ul>
  50. 50. ResultSet Methods <ul><li>Type get Type (int columnIndex) </li></ul><ul><ul><li>returns the given field as the given type </li></ul></ul><ul><ul><li>fields indexed starting at 1 (not 0) </li></ul></ul><ul><li>Type get Type (String columnName) </li></ul><ul><ul><li>same, but uses name of field </li></ul></ul><ul><ul><li>less efficient </li></ul></ul><ul><li>int findColumn(String columnName) </li></ul><ul><ul><li>looks up column index given column name </li></ul></ul>
  51. 51. ResultSet Methods <ul><li>String getString(int columnIndex) </li></ul><ul><li>boolean getBoolean(int columnIndex) </li></ul><ul><li>byte getByte(int columnIndex) </li></ul><ul><li>short getShort(int columnIndex) </li></ul><ul><li>int getInt(int columnIndex) </li></ul><ul><li>long getLong(int columnIndex) </li></ul><ul><li>float getFloat(int columnIndex) </li></ul><ul><li>double getDouble(int columnIndex) </li></ul><ul><li>Date getDate(int columnIndex) </li></ul><ul><li>Time getTime(int columnIndex) </li></ul><ul><li>Timestamp getTimestamp(int columnIndex) </li></ul>
  52. 52. ResultSet Methods <ul><li>String getString(String columnName) </li></ul><ul><li>boolean getBoolean(String columnName) </li></ul><ul><li>byte getByte(String columnName) </li></ul><ul><li>short getShort(String columnName) </li></ul><ul><li>int getInt(String columnName) </li></ul><ul><li>long getLong(String columnName) </li></ul><ul><li>float getFloat(String columnName) </li></ul><ul><li>double getDouble(String columnName) </li></ul><ul><li>Date getDate(String columnName) </li></ul><ul><li>Time getTime(String columnName) </li></ul><ul><li>Timestamp getTimestamp(String columnName) </li></ul>
  53. 53. isNull <ul><li>In SQL, NULL means the field is empty </li></ul><ul><li>Not the same as 0 or “” </li></ul><ul><li>In JDBC, you must explicitly ask if a field is null by calling ResultSet.isNull(column) </li></ul>
  54. 54. Sample Database <ul><li>Employee ID Last Name First Name </li></ul><ul><li>1 Davolio Nancy </li></ul><ul><li>2 Fuller Andrew </li></ul><ul><li>3 Leverling Janet </li></ul><ul><li>4 Peacock Margaret </li></ul><ul><li>5 Buchanan Steven </li></ul>
  55. 55. SELECT Example <ul><li>Connection con = DriverManager.getConnection(url, &quot;alex&quot;, &quot;8675309&quot;); </li></ul><ul><li>Statement st = con.createStatement(); </li></ul><ul><li>ResultSet results = st.executeQuery(&quot;SELECT EmployeeID, LastName, FirstName FROM Employees&quot;); </li></ul>
  56. 56. SELECT Example (Cont.) <ul><li>while (results.next()) { </li></ul><ul><li>int id = results.getInt(1); </li></ul><ul><li>String last = results.getString(2); </li></ul><ul><li>String first = results.getString(3); </li></ul><ul><li>System.out.println(&quot;&quot; + id + &quot;: &quot; + first + &quot; &quot; + last); </li></ul><ul><li>} </li></ul><ul><li>st.close(); </li></ul><ul><li>con.close(); </li></ul>
  57. 57. Mapping Java Types to SQL Types <ul><li>SQL type Java Type </li></ul><ul><li>CHAR, VARCHAR , LONGVARCHAR String </li></ul><ul><li>NUMERIC , DECIMAL java.math.BigDecimal </li></ul><ul><li>BIT boolean </li></ul><ul><li>TINYINT byte </li></ul><ul><li>SMALLINT short </li></ul><ul><li>INTEGER int </li></ul><ul><li>BIGINT long </li></ul><ul><li>REAL float </li></ul><ul><li>FLOAT, DOUBLE double </li></ul><ul><li>BINARY, VARBINARY , LONGVARBINARY byte[] </li></ul><ul><li>DATE java.sql.Date </li></ul><ul><li>TIME java.sql.Time </li></ul><ul><li>TIMESTAMP java.sql.Timestamp </li></ul>
  58. 58. Database Time <ul><li>Times in SQL are notoriously unstandard </li></ul><ul><li>Java defines three classes to help </li></ul><ul><li>java.sql.Date </li></ul><ul><ul><li>year, month, day </li></ul></ul><ul><li>java.sql.Time </li></ul><ul><ul><li>hours, minutes, seconds </li></ul></ul><ul><li>java.sql.Timestamp </li></ul><ul><ul><li>year, month, day, hours, minutes, seconds, nanoseconds </li></ul></ul><ul><ul><li>usually use this one </li></ul></ul>
  59. 59. Modifying the Database <ul><li>use executeUpdate if the SQL contains “INSERT” or “UPDATE” </li></ul><ul><li>Why isn’t it smart enough to parse the SQL? Optimization. </li></ul><ul><li>executeUpdate returns the number of rows modified </li></ul><ul><li>executeUpdate also used for “CREATE TABLE” etc. (DDL) </li></ul>
  60. 60. INSERT example
  61. 61. Transaction Management <ul><li>Transactions are not explicitly opened and closed </li></ul><ul><li>Instead, the connection has a state called AutoCommit mode </li></ul><ul><li>if AutoCommit is true, then every statement is automatically committed </li></ul><ul><li>default case: true </li></ul>
  62. 62. setAutoCommit <ul><li>Connection.setAutoCommit(boolean) </li></ul><ul><li>if AutoCommit is false, then every statement is added to an ongoing transaction </li></ul><ul><li>you must explicitly commit or rollback the transaction using Connection.commit() and Connection.rollback() </li></ul>
  63. 63. Connection Managers <ul><li>Hint: for a large threaded database server, create a Connection Manager object </li></ul><ul><li>It is responsible for maintaining a certain number of open connections to the database </li></ul><ul><li>When your applications need a connection, they ask for one from the CM’s pool </li></ul><ul><li>Why? Because opening and closing connections takes a long time </li></ul><ul><li>Warning: the CM should always setAutoCommit(false) when a connection is returned </li></ul>
  64. 64. Optimized Statements <ul><li>Prepared Statements </li></ul><ul><ul><li>SQL calls you make again and again </li></ul></ul><ul><ul><li>allows driver to optimize (compile) queries </li></ul></ul><ul><ul><li>created with Connection.prepareStatement() </li></ul></ul><ul><li>Stored Procedures </li></ul><ul><ul><li>written in DB-specific language </li></ul></ul><ul><ul><li>stored inside database </li></ul></ul><ul><ul><li>accesed with Connection.prepareCall() </li></ul></ul>
  65. 65. JDBC Class Diagram Whoa!
  66. 66. Metadata <ul><li>Connection: </li></ul><ul><ul><li>DatabaseMetaData getMetaData() </li></ul></ul><ul><li>ResultSet: </li></ul><ul><ul><li>ResultSetMetaData getMetaData() </li></ul></ul>
  67. 67. ResultSetMetaData <ul><li>What's the number of columns in the ResultSet? </li></ul><ul><li>What's a column's name? </li></ul><ul><li>What's a column's SQL type? </li></ul><ul><li>What's the column's normal max width in chars? </li></ul><ul><li>What's the suggested column title for use in printouts and displays? </li></ul><ul><li>What's a column's number of decimal digits? </li></ul><ul><li>Does a column's case matter? </li></ul><ul><li>Is the column a cash value? </li></ul><ul><li>Will a write on the column definitely succeed? </li></ul><ul><li>Can you put a NULL in this column? </li></ul><ul><li>Is a column definitely not writable? </li></ul><ul><li>Can the column be used in a where clause? </li></ul><ul><li>Is the column a signed number? </li></ul><ul><li>Is it possible for a write on the column to succeed? </li></ul><ul><li>and so on... </li></ul>
  68. 68. DatabaseMetaData <ul><li>What tables are available? </li></ul><ul><li>What's our user name as known to the database? </li></ul><ul><li>Is the database in read-only mode? </li></ul><ul><li>If table correlation names are supported, are they restricted to be different from the names of the tables? </li></ul><ul><li>and so on… </li></ul>
  69. 69. JavaBlend: Java to Relational Mapping
  70. 70. JDBC 2.0 <ul><li>Scrollable result set </li></ul><ul><li>Batch updates </li></ul><ul><li>Advanced data types </li></ul><ul><ul><li>Blobs, objects, structured types </li></ul></ul><ul><li>Rowsets </li></ul><ul><ul><li>Persistent JavaBeans </li></ul></ul><ul><li>JNDI </li></ul><ul><li>Connection Pooling </li></ul><ul><li>Distributed transactions via JTS </li></ul>
  71. 71. Summary <ul><li>State what has been learned </li></ul><ul><li>Define ways to apply training </li></ul><ul><li>Request feedback of training session </li></ul>
  72. 72. Where to get more information <ul><li>Other training sessions </li></ul><ul><li>Reese, Database Programming with JDBC and Java (O’Reilly) </li></ul><ul><li>http://java.sun.com/products/jdbc/ </li></ul><ul><li>http://java.sun.com/products/java-blend/ </li></ul><ul><li>http://www.purpletech.com/java/ (Author’s site) </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×