JDBC - Java Database Connectivity What is JDBC? JDBC provides Java applications with access to most database systems via SQL The architecture and API closely resemble Microsoft's ODBC (Open DataBase Connectivity) JDBC 1.0 was originally introduced into Java 1.1 JDBC 2.0 was added to Java 1.2 and so on.. JDBC 4.0 is the latest version. JDBC classes are contained within the java.sql & javax.sql packages. There are few classes There are several interfaces JDBC Architecture With JDBC, the application programmer uses the JDBC API The developer never uses any proprietary APIs • Any proprietary APIs are implemented by a JDBC driver • There are 4 types of JDBC Drivers Java Application JDBC API JDBC DriverManager JDBC Driver JDBC Driver JDBC Architecture Application • • • • JDBC Driver Java code calls JDBC library JDBC loads a driver Driver talks to a particular database Can have more than one driver -> more than one database. JDBC Classes DriverManager Manages JDBC Drivers Used to Obtain a connection to a Database Date Used to Map between java.util.Date and the SQL DATE type • Time Used to Map between java.util.Date and the SQL TIME type JDBC Interfaces Driver All JDBC Drivers must implement the Driver interface. Used to obtain a connection to a specific database type • Connection Represents a connection to a specific database Used for creating statements Used for managing database transactions Used for accessing stored procedures Used for creating callable statements ResultSet Represents the result of an SQL statement Provides methods for navigating through the resulting data JDBC Interfaces Statement Used for executing SQL statements against the database • PreparedStatement Similar to a stored procedure An SQL statement (which can contain parameters) is compiled and stored in the database CallableStatement Used for executing stored procedures JDBC Drivers There are 4 types of JDBC Drivers Type 1 - JDBC-ODBC Bridge Type 2 - JDBC-Native Bridge Type 3 - JDBC-Net Bridge Type 4 - Direct JDBC Driver Type 1 only runs on platforms where ODBC is available ODBC must be configured separately Type 2 Drivers map between a proprietary Database API and the JDBC API Type 3 Drivers are used with middleware products Type 4 Drivers are written in Java In most cases, type 4 drivers are preferred Client Application GUI Database Server JDBC API Network Interface SQL Results SQL Requests SQL Results SQL Requests Network Connection JDBC API defines a set of interfaces and classes to be used for communicating with a database. Client Application Database Server JDBC Driver Database Libraries Network Interface SQL Results SQL Requests SQL Results SQL Requests Network Connection JDBC Driver: translates java into SQL. JDBC drivers are implemented by database vendors. JDBC supports the ANSI SQL92 Entry Level standard. JDBC Driver Types: Driver Type Description 1. ODBC-JDBC Bridge Map JDBC calls to ODBC driver calls on the client. 2. Native API-Part Java Maps JDBC calls to native calls on the client. 3. JDBC Network-All Java Maps JDBC calls to network protocol, which calls native methods on server. 4. Native Protocol-All Java Directly calls RDBMS from the client machine. Type I: JDBC-ODBC Bridge Driver Client Application JDBC Driver Local Disk ODBC Driver Network Interface SQL Requests SQL Results Proprietary Database Protocol Network Interface Stand-Alone Applications run on Local Machine JDBC Driver: translates java calls into ODBC calls. Harder to debug, slower, not work for applets. Inexpensive, readily available. Database Server Type II: Native-API-Partly Java Driver Client Application JDBC Driver Local Disk Native Database Libraries (Call Level Interface) Network Interface SQL Requests SQL Results Proprietary Database Protocol Network Interface JDBC Driver: use local libraries to communicate with database server. Java calls are translated into local CLI calls. Faster than the ODBC bridge, not work for applets. Database Server Type III: JDBC-Net-All-Java Driver Client Application JDBC Driver (Client) Local Disk Network Interface SQL Requests SQL Results JDBC Driver Network Protocol Network Interface •JDBC Driver: client calls are translated into driver-specific network protocol. •JDBC Driver: server listener translates the requests into CLI calls at server site. •All database-specific code resides on the server. •JDBC driver network protocol is not Server JDBC Driver (Server Listener) Database Native Database Libraries (Call Level Interface) Type IV: Native-Protocol-All-Java Driver Client Application Local Disk JDBC Driver Network Interface SQL Requests SQL Results Proprietary DB Protocol (in Java) Network Interface •JDBC Driver: 100% java and use no CLI native libraries. •Support applets containing the driver to be downloaded over the network, I.e., applets can communicate directly with the database. Server Database JDBC Drivers (Fig.) Type I “Bridge” JDBC Type II “Native” Type III “Middleware” Type IV “Pure” ODBC ODBC Driver CLI (.lib) Middleware Server SQL Types/Java Types Mapping SQL Type Java Type CHAR VARCHAR LONGVARCHAR NUMERIC DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE BINARY VARBINARY DATE TIME String String String java.Math.BigDecimal java.Math.BigDecimal boolean int int int long float double double byte[] byte[] java.sql.Date java.sql.Time Steps To execute a statement against a database, the following flow is observed Load the driver (Only performed once) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Obtain a Connection to the database (Save for later use) Connection con = DriverManager.getConnection("jdbc:odbc:DSN"); Obtain a Statement object from the Connection Statement st=con.createStatement() PreparedStatement pst=con.prepareStatement(String sql) Use the Statement object to execute SQL. Updates, inserts and deletes return Boolean. Selects return a ResultSet ResultSet rs=st.executeQuery(String sql) Navigate ResultSet, using data as required public int getInt(int columnNumber) public String getString(String columnName) Close Connection. con.close() import java.sql.*; class Conn1 { public static void main(String[] args) { ResultSet rs; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection c=DriverManager.getConnection("jdbc:odbc:mydsn"); Statement st=c.createStatement(); rs=st.executeQuery("select * from stud1"); System.out.println("Name" +"\t"+"Roll"); while(rs.next()) { System.out.println(rs.getString("Name")+"\t"+rs.getInt("Roll")); } c.close(); } catch(Exception e) { System.out.println(e);