Enterprise Java Unit 1- Chapter 6 Prof. Sujata Rizal

Similar documents
JDBC Drivers Type. JDBC drivers implement the defined interfaces in the JDBC API for interacting with your database server.

SNS COLLEGE OF ENGINEERING, Coimbatore

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer

Unit 3 - Java Data Base Connectivity

UNIT-3 Java Database Client/Server

e-pg Pathshala Subject: Computer Science Paper: Web Technology Module: JDBC INTRODUCTION Module No: CS/WT/26 Quadrant 2 e-text

JDBC. Sun Microsystems has included JDBC API as a part of J2SDK to develop Java applications that can communicate with databases.

Questions and Answers. A. A DataSource is the basic service for managing a set of JDBC drivers.

JDBC. Oracle ODBC SP API SP API. SQL server C function calls. SQL server ODBC SP API. Oracle DSN Oracle ODBC Oracle

UNIT III - JDBC Two Marks

Java Database Connectivity (JDBC) 25.1 What is JDBC?

CSC System Development with Java. Database Connection. Department of Statistics and Computer Science. Budditha Hettige

Part I: Stored Procedures. Introduction to SQL Programming Techniques. CSC 375, Fall 2017

Kyle Brown Knowledge Systems Corporation by Kyle Brown and Knowledge Systems Corporation

Introduction JDBC 4.1. Bok, Jong Soon

JDBC Architecture. JDBC API: This provides the application-to- JDBC Manager connection.

The Design of JDBC The Structured Query Language Basic JDBC Programming Concepts Query Execution Scrollable and Updatable Result Sets

Programming in Java

Working with Databases and Java

Topic 12: Database Programming using JDBC. Database & DBMS SQL JDBC

JDBC - INTERVIEW QUESTIONS

PESIT Bangalore South Campus

Database connectivity (I) ()

JDBC SHORT NOTES. Abstract This document contains short notes on JDBC, their types with diagrams. Rohit Deshbhratar [ address]

Database Programming. Week 9. *Some of the slides in this lecture are created by Prof. Ian Horrocks from University of Oxford

MANTHLY TEST SEPTEMBER 2017 QUESTION BANK CLASS: XII SUBJECT: INFORMATICS PRACTICES (065)

Cyrus Shahabi Computer Science Department University of Southern California C. Shahabi

Application Programming for Relational Databases

This lecture. Databases - JDBC I. Application Programs. Database Access End Users

Discuss setting up JDBC connectivity. Demonstrate a JDBC program Discuss and demonstrate methods associated with JDBC connectivity

Lecture 2. Introduction to JDBC

JDBC [Java DataBase Connectivity]

Database Programming Overview. COSC 304 Introduction to Database Systems. Database Programming. JDBC Interfaces. JDBC Overview

Unit 2 JDBC Programming

SQL in a Server Environment

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

CSCI/CMPE Object-Oriented Programming in Java JDBC. Dongchul Kim. Department of Computer Science University of Texas Rio Grande Valley

ERwin and JDBC. Mar. 6, 2007 Myoung Ho Kim

Top 50 JDBC Interview Questions and Answers

Intoduction to JDBC (Java Database Connectivity-- Connecting to DBMS)

CSE 308. Database Issues. Goals. Separate the application code from the database

About Database Adapters

Java Database Connectivity

1. PhP Project. Create a new PhP Project as shown below and click next

Lab # 9. Java to Database Connection

More Database Programming. CS157A Chris Pollett Nov. 2, 2005.

Database Application Development

Java and the Java DataBase Connectivity (JDBC) API. Todd Kaufman April 25, 2002

Preview from Notesale.co.uk Page 21 of 162

CHAPTER 44. Java Stored Procedures

You write standard JDBC API application and plug in the appropriate JDBC driver for the database the you want to use. Java applet, app or servlets

SQL and Java. Database Systems Lecture 20 Natasha Alechina

Copyright 2016 Ramez Elmasri and Shamkant B. Navathe

PERSİSTENCE OBJECT RELATİON MAPPİNG

Databases and MySQL. COMP 342: Programming Methods. 16 September Databases and MySQL

How to program applications. CS 2550 / Spring 2006 Principles of Database Systems. SQL is not enough. Roadmap

DataBase Lab JAVA-DATABASE CONNECTION. Eng. Haneen El-masry

Database Application Development

Database Server. 2. Allow client request to the database server (using SQL requests) over the network.

Introduction to SQL & Database Application Development Using Java

JAVA AND DATABASES. Summer 2018

Asst.Prof.Eng. IOAN-GHEORGHE RAŢIU, PhD Asst.Prof. NICOLETA DAVID. George Bariţiu University, Braşov

Persistency Patterns. Repository and DAO

(C) Global Journal of Engineering Science and Research Management

SQL: Programming. Announcements (September 25) Motivation. CPS 116 Introduction to Database Systems. Pros and cons of SQL.

SQL: Programming Midterm in class next Thursday (October 5)

JDBC, Transactions. Niklas Fors JDBC 1 / 38

Oracle Database 10g Java Web

JDBC 3.0. Java Database Connectivity. 1 Java

CHAPTER 2 JDBC FUNDAMENTALS

SQL in a Server Environment (ii)

Chapter 13 Introduction to SQL Programming Techniques

SQL in a Server Environment

Embedded SQL. csc343, Introduction to Databases Diane Horton with examples from Ullman and Widom Fall 2014

JDBC BASIC 19/05/2012. Objectives. Java Database Connectivity. Definitions of JDBC. Part 1. JDBC basic Working with JDBC Adv anced JDBC programming

Why use a database? You can query the data (run searches) You can integrate with other business systems that use the same database You can store huge

O ne of the most important features of JavaServer

Pieter van den Hombergh. March 25, 2018

COMP102: Introduction to Databases, 23

Database Application Development

CMPUT 391 Database Management Systems. JDBC in Review. - Lab 2 -

SAS ODBC Driver. Overview: SAS ODBC Driver. What Is ODBC? CHAPTER 1

Chapter 1 An introduction to relational databases and SQL

Instructor: Jinze Liu. Fall 2008

Database Access with JDBC. Dr. Jens Bennedsen, Aarhus University, School of Engineering Aarhus, Denmark

Introduction to JDBC. JDBC: Java Database Connectivity. Why Access a Database with Java? Compilation. Six Steps. Packages to Import

Chapter 3 DB-Gateways

ABOUT CORE JAVA COURSE SCOPE:

SQL-PL Interface. Murali Mani. Perl /CGI with Oracle/mySQL Install your own web server and use servlets with JDBC and Oracle/mySQL

JDBC Programming: Intro

Java application using JDBC to connect to a database.

Embedded SQL. csc343, Introduction to Databases Renée J. Miller and Fatemeh Nargesian and Sina Meraji Winter 2018

Calling SQL from a host language (Java and Python) Kathleen Durant CS 3200

Introduction to Databases

Chapter 16: Databases

Accessing databases in Java using JDBC

Chapter 3 DB-Gateways

Oracle Database Jdbc Developer's Guide And Reference 10g Release 2

Creating Enterprise and WorkGroup Applications with 4D ODBC

DQpowersuite. Superior Architecture. A Complete Data Integration Package

Transcription:

Introduction JDBC is a Java standard that provides the interface for connecting from Java to relational databases. The JDBC standard is defined by Sun Microsystems and implemented through the standard java.sql interfaces. This allows individual providers to implement and extend the standard with their own JDBC drivers. JDBC stands for Java Database Connectivity, which is a standard Java API for database -independent connectivity between the Java programming language and a wide range of databases. The JDBC library includes APIs for each of the tasks commonly associated with database usage: Making a connection to a database Creating SQL or MySQL statements Executing that SQL or MySQL queries in the database Viewing & Modifying the resulting records JDBC API is a Java API that can access any kind of tabular data, especially data stored in a Relational Database. JDBC works with Java on a variety of platforms, such as Windows, Mac OS, and the various versions of UNIX. Design of JDBC Just as Java was designed to provide platform independence from hardware/software platforms, so too JDBC has been designed to provide some degree of database independence for developers. JDBC is designed to provide a database-neutral API for accessing relational databases from different vendors. Just as a Java application does not need to be aware of the operating system platform on which it is running, so too JDBC has been designed so that the database application can use the same methods to access data regardless of the underlying database product. JDBC was developed to work with the most common type of database: the relational database. This is not to say that JDBC cannot be used with another type of database. In fact, there are JDBC drivers that allow the API to be used to connect to both high-end, mainframe databases, which are not relational, and to access flat files and spreadsheets as databases (which are definitely not relational). But the reality is that JDBC is most commonly used with relational databases. The technical definition of a relational database is a database that stores data as a collection of related entities. These entities are composed of attributes that describe the entity, and each entity has a collection of rows. Another way to think about a relational database is that it stores information on real-world objects (the entities). The information about the objects is contained in the attributes for the object. 1

Since real world objects have some type of relation to each other, we must have a facility for expressing relations between the objects in the database. The relationships between the database objects is described using a query language, the most popular of which is the Structured Query Language (SQL). JavaSoft's JDBC consists of two layers: the JDBC API and the JDBC Driver Manager API. The JDBC API is the top layer and is the programming interface in Java to structured query language (SQL) which is the standard for accessing relational databases. The JDBC API communicates with the JDBC Driver Manager API, sending it various SQL statements. The manager communicates (transparent to the programmer) with the various third party drivers (provided by Database vendors like Oracle) that actually connect to the database and return the information from the query. JDBC Architecture: The JDBC API supports both two-tier and three-tier processing models for database access but in general JDBC Architecture consists of two layers: JDBC API: This provides the application-to-jdbc Manager connection. JDBC Driver API: This supports the JDBC Manager-to-Driver Connection. The JDBC API uses a driver manager and database-specific drivers to provide transparent connectivity to heterogeneous databases. The JDBC driver manager ensures that the correct driver is used to access each data source. The driver manager is capable of supporting multiple concurrent drivers connected to multiple heterogeneous databases. Following is the architectural diagram, which shows the location of the driver manager with respect to the JDBC drivers and the Java application: Fig. Architectural diagram 2

Common JDBC Components: The JDBC API provides the following interfaces and classes: DriverManager: This class manages a list of database drivers. Matches connection requests from the java application with the proper database driver using communication subprotocol. The first driver that recognizes a certain subprotocol under JDBC will be used to establish a database Connection. Driver: This interface handles the communications with the database server. You will interact directly with Driver objects very rarely. Instead, you use DriverManager objects, which manages objects of this type. It also abstracts the details associated with working with Driver objects Connection : This interface with all methods for contacting a database. The connection object represents communication context, i.e., all communication with database is through connection object only. Statement : You use objects created from this interface to submit the SQL statements to the database. Some derived interfaces accept parameters in addition to executing stored procedures. ResultSet: These objects hold data retrieved from a database after you execute an SQL query using Statement objects. It acts as an iterator to allow you to move through its data. SQLException: This class handles any errors that occur in a database application. JDBC configuration What is JDBC Driver? JDBC drivers implement the defined interfaces in the JDBC API for interacting with your database server. For example, using JDBC drivers enable you to open database connections and to interact with it by sending SQL or database commands then receiving results with Java. The Java.sql package that ships with JDK contains various classes with their behaviours defined and their actual implementaions are done in third-party drivers. Third party vendors implement the java.sql.driver interface in their database driver. JDBC Drivers Types: JDBC driver implementations vary because of the wide variety of operating systems and hardware platforms in which Java operates. Sun has divided the implementation types into four categories, Types 1, 2, 3, and 4, which is explained below: 3

Type 1: JDBC-ODBC Bridge Driver: In a Type 1 driver, a JDBC bridge is used to access ODBC drivers installed on each client machine. Using ODBC requires configuring on your system a Data Source Name (DSN) that represents the target database. When Java first came out, this was a useful driver because most databases only supported ODBC access but now this type of driver is recommended only for experimental use or when no other alternative is available. The JDBC-ODBC bridge driver uses ODBC driver to connect to the database. The JDBC- ODBC bridge driver converts JDBC method calls into the ODBC function calls. This is now discouraged because of thin driver. The JDBC-ODBC bridge that comes with JDK 1.2 is a good example of this kind of driver. Advantages: easy to use. can be easily connected to any database. Disadvantages: Fig. Type 1: JDBC-ODBC Bridge Driver Performance degraded because JDBC method call is converted into the ODBC function calls. The ODBC driver needs to be installed on the client machine. Type 2: JDBC-Native API: The Native API driver uses the client-side libraries of the database. The driver converts JDBC method calls into native calls of the database API. It is not written entirely in java. In a Type 2 driver, JDBC API calls are converted into native C/C++ API calls which are unique to the database. These drivers typically provided by the database vendors and used in the same manner as the JDBC-ODBC Bridge, the vendor-specific driver must be 4

installed on each client machine. If we change the Database we have to change the native API as it is specific to a database and they are mostly obsolete now but you may realize some speed increase with a Type 2 driver, because it eliminates ODBC's overhead. The Oracle Call Interface (OCI) driver is an example of a Type 2 driver. Advantage: Fig. Type 2: JDBC-Native API performance upgraded than JDBC-ODBC bridge driver. Disadvantage: The Native driver needs to be installed on the each client machine. The Vendor client library needs to be installed on client machine. Type 3: JDBC-Net pure Java: In a Type 3 driver, a three-tier approach is used to accessing databases. The JDBC clients use standard network sockets to communicate with an middleware application server. The socket information is then translated by the middleware application server into the call format required by the DBMS, and forwarded to the database server. This kind of driver is extremely flexible, since it requires no code installed on the client and a single driver can actually provide access to multiple databases. You can think of the application server as a JDBC "proxy," meaning that it makes calls for the client application. As a result, you need some knowledge of the application server's configuration in order to effectively use this driver type. Your application server might use a Type 1, 2, or 4 driver to communicate with the database, understanding the nuances will prove helpful. 5

Advantage: Fig. Type 3: JDBC-Net pure Java No client side library is required because of application server that can perform many tasks like auditing, load balancing, logging etc. Disadvantages: Network support is required on client machine. Requires database-specific coding to be done in the middle tier. Maintenance of Network Protocol driver becomes costly because it requires databasespecific coding to be done in the middle tier. Type 4: 100% pure Java Thin driver: In a Type 4 driver, a pure Java-based driver that communicates directly with vendor's database through socket connection. This is the highest performance driver available for the database and is usually provided by the vendor itself. This kind of driver is extremely flexible, you don't need to install special software on the client or server. Further, these drivers can be downloaded dynamically. MySQL's Connector/J driver is a Type 4 driver. Because of the proprietary nature of their network protocols, database vendors usually supply type 4 drivers. 6

Advantage: Better performance than all other drivers. No software is required at client side or server side. Disadvantage: Drivers depends on the Database. Which Driver should be used? If you are accessing one type of database, such as Oracle, Sybase, or IBM, the preferred driver type is 4. If your Java application is accessing multiple types of databases at the same time, type 3 is the preferred driver. Type 2 drivers are useful in situations where a type 3 or type 4 driver is not available yet for your database. The type 1 driver is not considered a deployment-level driver and is typically used for development and testing purposes only. After you've installed the appropriate driver, it's time to establish a database connection using JDBC. The programming involved to establish a JDBC connection is fairly simple. Here are these simple five steps: Register the Driver Create a Connection Create SQL Statement Execute SQL Statement Closing the connection 7

In this example we are using MySql as the database. So we need to know following information for the mysql database: Driver class: The driver class for the mysql database is com.mysql.jdbc.driver. Connection URL: The connection URL for the mysql database is jdbc:mysql://localhost:3306/sujata where jdbc is the API, mysql is the database, localhost is the server name on which mysql is running, we may also use IP address, 3306 is the port number and sujata is the database name. We may use any database, in such case, you need to replace the sujata with your database name. Username: The default username for the mysql database is root. Password: Password is given by the user at the time of installing the mysql database. In this example, we are going to use root as the password. Import JDBC Packages: The Import statements tell the Java compiler where to find the classes you reference in your code and are placed at the very beginning of your source code. To use the standard JDBC package, which allows you to select, insert, update, and delete data in SQL tables, add the following imports to your source code: import java.sql.*; import oracle.jdbc.driver.*; import oracle.sql.*; 8.3.5 Load and Register JDBC Driver: You must register the your driver in your program before you use it. Registering the driver is the process by which the Oracle driver's class file is loaded into memory so it can be utilized as an implementation of the JDBC interfaces. You need to do this registration only once in your program. Class.forName(): The most common approach to register a driver is to use Java's Class.forName() method to dynamically load the driver's class file into memory, which automatically registers it. This method is preferable because it allows you to make the driver registration configurable and portable. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("oracle.jdbc.driver.OracleDriver"); Connecting to Database: The getconnection() method is an overloaded method that takes three parameters, one each for the URL, username, and password. Only one parameter for the database URL. In this case, the URL contains the username 8

and password. Connection conn = DriverManager.getConnection(URL, username, passwd); Connection conn = DriverManager.getConnection(URL); Here each form requires a database URL. A database URL is an address that points to your database. Formulating a database URL is where most of the problems associated with establishing a connection occur. Following table lists down popular JDBC driver names and database URL. RDBMS JDBC driver name URL format MySQL com.mysql.jdbc.driver jdbc:mysql://hostname/ databasename ORACLE DB2 Sybase oracle.jdbc.driver.oracledriver jdbc:oracle:thin:@hostname:port Number:databaseName COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName com.sybase.jdbc.sybdriver jdbc:sybase:tds:hostname: Number/databaseName port All the highlighted part in URL format is static and you need to change only remaining part as per your database setup. Create Connection Object: Using a database URL with a username and password: The most commonly used form of getconnection() requires you URL, a username, and a password: to pass a database Assuming you are using Oracle's thin driver, you'll specify a host:port:databasename value for the database portion of the URL. If you have a host at TCP/IP address 192.0.0.1 with a host name of amrood, and your Oracle listener is configured to listen on port 1521, and your database name is EMP, then complete database URL would then be: jdbc:oracle:thin:@amrood:1521:emp Now you have to call getconnection() method with appropriate username and password to get a Connection object as follows: String URL = "jdbc:oracle:thin:@amrood:1521:emp"; String USER = "username"; String PASS = "password" 9

Connection conn = DriverManager.getConnection(URL, USER, PASS); Querying the Database Statement sql_stmt = conn.createstatement(); Executing the Query and Returning a ResultSet ResultSet rset = sql_stmt.executequery ("SELECT empno, ename, sal, deptno FROM emp ORDER BY ename"); Alternatively, the SQL statement can be placed in a string and then this string passed to the executequery() function. This is shown below. String sql = "SELECT empno, ename, sal, deptno FROM emp ORDER BY ename"; ResultSet rset = sql_stmt.executequery(sql); Closing JDBC connections: At the end of your JDBC program, it is required explicitly close all the connections to the database to end each database session. However, if you forget, Java's garbage collector will close the connection when it cleans up stale objects. Relying on garbage collection, especially in database programming, is very poor programming practice. You should make a habit of always closing the connection with the close() method associated with connection object. To ensure that a connection is closed, you could provide a finally block in your code. A finally block always executes, regardless if an exception occurs or not. rset.close(); (ResultSet object) sql_stmt.close(); (Statement Object) conn.close(); (Connection object) Interfaces Statement JDBC Statements Once a connection is obtained we can interact with the database. The JDBC Statement, CallableStatement, and PreparedStatement interfaces define the methods and properties that enable you to send SQL or PL/SQL commands and receive data from your database. PreparedStatement Recommended Use Use for general-purpose access to your database. Useful when you are using static SQL statements at runtime. The Statement interface cannot accept parameters. Use when you plan to use the SQL statements many times. The PreparedStatement interface accepts input parameters at runtime. 10

CallableStatement Use when you want to access database stored procedures. The CallableStatement interface can also accept runtime input parameters. The Statement Objects: Creating Statement Object: Before you can use a Statement object to execute a SQL statement, you need to create using the Connection object's createstatement( ) method, as in the following example: Statement stmt = null; try { stmt = conn.createstatement( ); catch (SQLException e) { finally { one Closing Statement Obeject: Just as you close a Connection object to save database resources, for the same reason you should also close the Statement object. A simple call to the close() method will do the job. If you close the Connection object first it will close the Statement object as well. However, you should always explicitly close the Statement object to ensure proper cleanup. Statement stmt = null; try { stmt = conn.createstatement( ); catch (SQLException e) { finally { stmt.close(); The PreparedStatement Objects: The PreparedStatement interface extends the Statement interface which gives you 11

added functionality with a couple of advantages over a generic Statement object. This statement gives you the flexibility of supplying arguments dynamically. Creating PreparedStatement Object: PreparedStatement pstmt = null; try { String SQL = "Update Employees SET age =? WHERE id =?"; pstmt = conn.preparestatement(sql); catch (SQLException e) { finally { Closing PreparedStatement Obeject: Just as you close a Statement object, for the same reason you should also close the PreparedStatement object. A simple call to the close() method will do the job. If you close the Connection object first it will close the PreparedStatement object as well. However, you should always explicitly close the PreparedStatement object to ensure proper cleanup. PreparedStatement pstmt = null; try { String SQL = "Update Employees SET age =? WHERE id =?"; pstmt = conn.preparestatement(sql); catch (SQLException e) { finally { pstmt.close(); 12

The CallableStatement Objects: Just as a Connection object creates the Statement and PreparedStatement objects, it also creates the CallableStatement object which would be used to execute a call to a database stored procedure. Creating CallableStatement Object: Suppose, you need to execute the following Oracle stored procedure: CREATE OR REPLACE PROCEDURE getempname (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END; NOTE: Above stored procedure has been written for Oracle. Stored procedure - For MySQL as follows to create it in EMP database: DELIMITER $$ DELIMITER ; DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$ CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255)) BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END $$ Closing CallableStatement Obeject: Just as you close other Statement object, for the same reason you should also close the CallableStatement object. A simple call to the close() method will do the job. If you close the Connection object first it will close the CallableStatement object as well. However, you should always explicitly close the CallableStatement object to ensure proper cleanup. CallableStatement cstmt = null; try { String SQL = "{call getempname (?,?)"; cstmt = conn.preparecall (SQL); catch (SQLException e) { finally { cstmt.close(); 13