JDBC: Part I
description
Transcript of JDBC: Part I
![Page 1: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/1.jpg)
1
JDBC: Part I
![Page 2: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/2.jpg)
Attribution
• These slides are based on three primary sources:– Sun JDBC Tutorial
• URL: http://java.sun.com/docs/books/tutorial/ jdbc/TOC.html– George Reese, “Database Programming with JDBC and Java”
(O’Reilly & Associates.)– Marty Hall, “Core Web Programming” (Prentice Hall.)
![Page 3: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/3.jpg)
Road Map
• Introduction to JDBC/JDBC Drivers• Overview: Six Steps to using JDBC• Example 1: Setting up Tables via JDBC• Example 2: Inserting Data via JDBC• Example 3: Querying Data via JDBC• Exception Handling Overview
![Page 4: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/4.jpg)
4
Introduction to JDBC andJDBC Drivers
![Page 5: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/5.jpg)
Introduction to JDBC
• JDBC is a simple API for connecting from Java applications to multiple databases.
• Lets you smoothly translate between the world of the database, and the world of the Java application.
• The idea of a universal database access API is not a new one. – For example, Open Database Connectivity (ODBC) was developed to create a
single standard for database access in the Windows environment.
• JDBC API aims to be as simple as possible while providing developers with maximum flexibility.
![Page 6: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/6.jpg)
Understanding JDBC Drivers
• To connect to a database– , you first need a JDBC Driver.
• JDBC Driver: – set of classes that interface with
a specific database engine.
Java Application
JDBC Driver Manager
JDBC-ODBC Bridge
VendorSpecific
JDBC Driver
VendorSpecific
JDBC Driver
Database
Database
Diagram Source: Marty Hall,Core Web Programming(Prentice Hall.)
![Page 7: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/7.jpg)
JDBC Drivers
• JDBC drivers exist for every major database including: – Oracle, SQL Server, Sybase, and MySQL.
• For MySQL, – we will be using the open source MySQL Connector/J.
• http://www.mysql.com/downloads/api-jdbc.html.
![Page 8: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/8.jpg)
Installing the MySQL Driver
• To use the MySQL Connector/J Driver, – you need to download the complete distribution;
• and
– Add the following JAR to your CLASSPATH (change version with the actual version of connector you downloaded such as 3.1.7:
• mysql-connector-java-[version]-stable-bin.jar
• To use the driver within Tomcat, copy the jar file above to:– [TOMCAT_HOME]\ROOT\WEB-INF\lib
![Page 9: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/9.jpg)
9
Overview: Six Steps to Using JDBC
![Page 10: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/10.jpg)
Six Steps to Using JDBC
1. Load the JDBC Driver2. Establish the Database Connection3. Create a Statement Object4. Execute a Query5. Process the Results6. Close the Connection
![Page 11: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/11.jpg)
1) Loading the JDBC Driver• To use a JDBC driver,
– you must load the driver via the Class.forName() method.• In general, the code looks like this:
Class.forName("jdbc.DriverXYZ");– where jbdc.DriverXYZ is the JDBC Driver you want to
load.• To use MySQL and load jdbc driver:
– Class.forName(”com.mysql.odbc.driver");
• To use ORACLE and load jdbc driver:– Class.forName(”oracle.odbc.driver.OracleDriver");
• If you are using SUN JDBC-ODBC Driver, your code will look like this:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
![Page 12: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/12.jpg)
Loading the MySQL DriverClass.forName("com.mysql.jdbc.Driver");
//use the above with project 5 to load driver
• If you are using the MM MySQL Driver, your code will look like this:try {
Class.forName("com.mysql.jdbc.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }• Class.forName() will
– throw a ClassNotFoundException if your CLASSPATH is not set up properly.
• Hence, it's a good idea to surround the forName() with a try/catch block.
![Page 13: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/13.jpg)
2) Establish the Connection
• Once you have loaded your JDBC driver,
– the next step is to establish a database connection.
• The following line of code illustrates the basic idea:
Connection con = DriverManager.getConnection(url);
![Page 14: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/14.jpg)
Creating a Connection URL
• The only difficulty in establishing a connection is specifying the correct URL.
• In general, the URL has the following format: jdbc:subprotocol:subname.– JDBC indicates that this is a JDBC Connection (no
mystery there!)– The subprotocol identifies the driver you want to use.– The subname identifies the database name/location.
![Page 15: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/15.jpg)
Connection URL: ODBC
• For example, the following code uses a – JDBC-ODBC bridge to connect to the local Fred
database:– String url = "jdbc:odbc:Fred";– Connection con = DriverManager.getConnection(url,
“username", "password");
![Page 16: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/16.jpg)
Connection URL: MySQLuse this with project5
• Here's how you might connect to MySQL:– String url = "jdbc:mysql://localhost/databasename";
– Connection con = DriverManager.getConnection(url);
• In this case, • we are using the MySQL JDBC Driver
– to connect to the databasebasename, • located on the localhost machine.
• If this code executes successfully, we will have a Connection object for communicating directly with the database.
![Page 17: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/17.jpg)
3) Create a Statement Object
• The JDBC Statement object sends SQL statements to the database.
• Statement objects are created from active Connection objects.
• For example:– Statement stmt = con.createStatement();
• With a Statement object, you can issue SQL calls directly to the database.
![Page 18: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/18.jpg)
4) Execute a Query
• executeQuery()– Executes the SQL query and returns the data in a table (ResultSet)– The resulting table may be empty but never null
ResultSet results = statement.executeQuery("SELECT a, b FROM table");
• executeUpdate()– Used to execute for INSERT, UPDATE, or DELETE SQL statements – The return is the number of rows that were affected in the database– Supports Data Definition Language (DDL) statements CREATE
TABLE, DROP TABLE and ALTER TABLE
![Page 19: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/19.jpg)
Useful Statement Methods
• getMaxRows/setMaxRows– Determines the number of rows a ResultSet may contain– Unless explicitly set, the number of rows are unlimited
(return value of 0)
• getQueryTimeout/setQueryTimeout– Specifies the amount of a time a driver will wait for a STATEMENT to complete before throwing a SQLException
![Page 20: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/20.jpg)
5) Process the Results
• A ResultSet contains the results of the SQL query.
• Useful Methods• All methods can throw a SQLException
– close• Releases the JDBC and database resources• The result set is automatically closed when the associated Statement object executes a new query
– getMetaDataObject• Returns a ResultSetMetaData object containing
information about the columns in the ResultSet
![Page 21: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/21.jpg)
ResultSet (Continued)
• Useful Methods– next
• Attempts to move to the next row in the ResultSet– If successful true is returned; – otherwise, false– The first call to next positions the cursor a the
first row
![Page 22: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/22.jpg)
ResultSet (Continued)
• Useful Methods– findColumn
• Returns the corresponding integer value corresponding to the specified column name
• Column numbers in the result set do not necessarily map to the same column numbers in the database
– getXxx• Returns the value from the column specified by column name or
column index as an Xxx Java type• Returns 0 or null, if the value is a SQL NULL• Legal getXxx types:
double byte intDate String floatshort long Time Object
![Page 23: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/23.jpg)
6) Close the Connection
• To close the database connection:– stmt.close();– connection.close();
• Note: Some application servers, such as BEA WebLogic maintain a pool of database connections.– This is much more efficient, as applications do not have
the overhead of constantly opening and closing database connections.
![Page 24: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/24.jpg)
24
Example 1:Setting Up Tables via JDBC
![Page 25: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/25.jpg)
The Coffee Tables
• To get started, we will first examine JDBC code for creating new tables.
• This java code creates a table for storing coffee data:
• Here’s the SQL Statement:CREATE TABLE COFFEES(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, SALES INTEGER, TOTAL INTEGER);
![Page 26: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/26.jpg)
The Coffees TablesCOF_NAME SUP_ID PRICE SALES TOTAL
Colombian 101 7.99 0 0
French_Roast 49 8.99 0 0
Espresso 150 9.99 0 0
Colombian_Decaf 101 8.99 0 0
French_Roast_Decaf 49 9.99 0 0
![Page 27: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/27.jpg)
The Coffee Table
• You could create this table via MySQL, but you can also create it via JDBC.
• A few things to note about the table:– The column named SUP_ID contains an integer value
indicating a Supplier ID. • Suppliers will be stored in a separate table. • In this case, SUP_ID is referred to as a foreign key.
– The column named SALES stores values of SQL type INTEGER and indicates the number of pounds of coffee sold during the current week.
– The final column, TOTAL, contains a SQL INTEGER which gives the total number of pounds of coffee sold to date.
![Page 28: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/28.jpg)
import java.sql.*;
public class CreateCoffees { public static void main(String args[]) { String url = "jdbc:mysql://localhost/coffee"; Connection con; String createString; createString = "create table COFFEES " + "(COF_NAME VARCHAR(32), " + "SUP_ID INTEGER, " + "PRICE FLOAT, " + "SALES INTEGER, " + "TOTAL INTEGER)"; Statement stmt;
![Page 29: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/29.jpg)
try { Class.forName("com.mysql.jdbc.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }
try { con = DriverManager.getConnection(url); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); con.close();
} catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } }}
1
2346
![Page 30: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/30.jpg)
30
Example 2:Inserting Data via JDBC
![Page 31: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/31.jpg)
import java.sql.*;
public class InsertCoffees {
public static void main(String args[]) throws SQLException { System.out.println ("Adding Coffee Data"); ResultSet rs = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/coffee"; Connection con; Statement stmt; try { Class.forName("com.mysql.jdbc.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }
1
![Page 32: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/32.jpg)
try { con = DriverManager.getConnection(url); stmt = con.createStatement(); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES('Amaretto', 49, 9.99, 0, 0)"); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES('Hazelnut', 49, 9.99, 0, 0)"); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES('Amaretto_decaf', 49, 10.99, 0, 0)"); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES('Hazelnut_decaf', 49, 10.99, 0, 0)"); stmt.close(); con.close(); System.out.println ("Done"); } catch(SQLException ex) { System.err.println("-----SQLException-----"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message: " + ex.getMessage()); System.err.println("Vendor: " + ex.getErrorCode()); } }}
23
4
6
![Page 33: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/33.jpg)
33
Example 3:Querying Data via JDBC
![Page 34: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/34.jpg)
import java.sql.*;
public class SelectCoffees {
public static void main(String args[]) throws SQLException { ResultSet rs = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/coffee"; Connection con; Statement stmt; try {
Class.forName("com.mysql.jdbc.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }
try { con = DriverManager.getConnection(url);
stmt = con.createStatement();
1
23
![Page 35: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/35.jpg)
ResultSet uprs = stmt.executeQuery("SELECT * FROM COFFEES"); System.out.println("Table COFFEES:"); while (uprs.next()) { String name = uprs.getString("COF_NAME"); int id = uprs.getInt("SUP_ID"); float price = uprs.getFloat("PRICE"); int sales = uprs.getInt("SALES"); int total = uprs.getInt("TOTAL"); System.out.print(name + " " + id + " " + price); System.out.println(" " + sales + " " + total); } uprs.close(); stmt.close(); con.close();
} catch(SQLException ex) { System.err.println("-----SQLException-----"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message: " + ex.getMessage()); System.err.println("Vendor: " + ex.getErrorCode()); } }}
4
5
6
![Page 36: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/36.jpg)
36
JDBC Exception Handling
![Page 37: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/37.jpg)
Exception Handling
• SQL Exceptions– Nearly every JDBC method can throw a SQLException
in response to a data access error – If more than one error occurs, they are chained together – SQL exceptions contain:
• Description of the error, getMessage• The SQLState (Open Group SQL specification) identifying the
exception, getSQLState• A vendor-specific integer, error code, getErrorCode• A chain to the next SQLException, getNextException
![Page 38: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/38.jpg)
SQL Exception Example
try {
... // JDBC statement.
} catch (SQLException sqle) { while (sqle != null) { System.out.println("Message: " + sqle.getMessage()); System.out.println("SQLState: " + sqle.getSQLState()); System.out.println("Vendor Error: " + sqle.getErrorCode()); sqle.printStrackTrace(System.out); sqle = sqle.getNextException(); }}
![Page 39: JDBC: Part I](https://reader036.fdocuments.in/reader036/viewer/2022062723/56813f93550346895daa846d/html5/thumbnails/39.jpg)
Summary
• The JDBC Driver connections a Java application to a specific database.
• Six Steps to Using JDBC:1. Load the Driver2. Establish the Database Connection3. Create a Statement Object4. Execute the Query5. Process the Result Set6. Close the Connection
• Make sure to wrap your JDBC calls within try/catch blocks.