34
JDBC – Java DataBase Connectivity Accessing a Database in Java

Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

  • Upload
    others

  • View
    87

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

JDBC –Java DataBase Connectivity

Accessing a Database in Java

Page 2: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

2

What is JDBC?

JDBC helps us to connect to a database and execute SQL statements against a database. JDBC API provides set of interfaces and there are different implementations respective to different databases

What’s an API? “An API that lets you access virtually any tabular data

source from the Java programming language” What’s a tabular data source?

“… access virtually any data source, from relational databases to spreadsheets and flat files.”

Page 3: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

3

General Architecture

Page 4: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

4

JDBC Architecture

Java Application

JDBC

Oracle

DB2

MySQL

Oracle Driver

DB2Driver

MySQL Driver

Network

We will use this one…

Page 5: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

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 behaviors defined and their actual implementations are done in third-party drivers. Third party vendors implements the java.sql.Driver interface in their database driver.

A driver is nothing but software required to connect to a database from Java program.

Page 6: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

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

Type 1: JDBC-ODBC Bridge

Type 2: Native-API/partly Java driver

Type 3: Net-protocol/all-Java driver

Type 4: Native-protocol/all-Java driver

Page 7: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Two-tier and three-tier architecture

The JDBC API supports a two-tier and a three-tier architecture for database access.

two-tier model three-tier model

In a two-tier model, a Java application/applet communicates directly with the database, via the JDBC driver. The Java application/applet and the database can be on the same machine, or the database can be on a server and the Java application/applet can be on a client machine using any network protocol.

In a three-tier model, i.e. client, server and database. It is a Java application /applet communicates with a middle tier component that functions as an application server. The application server talks to a given database using JDBC.

Page 8: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Type 1: JDBC-ODBC Bridge DriverIn a Type 1 driver, a JDBC bridge is used

to access ODBC(Object Database connectivity)

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 that comes with JDK 1.2 is a good example of this kind of driver.

Page 9: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Type 2: JDBC-Native API: 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 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.

Page 10: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Type 3: JDBC-Net pure Java: In a Type 3 driver, a three-tier

approach i.e. client, server and database is used.

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.

Page 11: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Type 4: 100% pure Java:

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.

Page 12: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a 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.

Page 13: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

13

JDBC Driver for MySQL (Connector/J)

Download Connector/J using binary distribution from : http://dev.mysql.com/downloads/connector/j/5.0.html

To install simply unzip (or untar) and put mysql-connector-java-[version]-bin.jar (I have installed mysql-connector-java-5.0.4-bin.jar) in the class path

For online documentation, see : http://dev.mysql.com/doc/refman/5.0/en/connector-j.html

Page 14: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

14

Basic steps to use a database in Java

1.Establish a connection 2.Create JDBC Statements 3.Execute SQL Statements 4.GET ResultSet 5.Close connections

Page 15: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

15

1. Establish a connection

import java.sql.*; Load the vendor specific driver

Class.forName("com.mysql.jdbc.Driver "); What do you think this statement does, and how? Dynamically loads a driver class, for MYSQL

database Make the connection

Connection con = DriverManager.getConnection( “jdbc:mysql://localhost:3306/ “+dbname,username, passwd);

Establishes connection to database by obtaining a Connection object

Page 16: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Database URL

String DB_URL = "jdbc:mysql://dbserver:3306/mydb";

The format of a database URL is:

Protocol Sub-protocol Hostname Port DatabaseName

Port is the TCP port number where the database server is listening.

3306 is the default port for MySQL

Use hostname "localhost" for the local machine.

Page 17: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Database URL

Example: These 4 URL refer to the same database

"jdbc:mysql://localhost:3306/world"

"jdbc:mysql://localhost/world"

"jdbc:mysql:///world"

"jdbc:mysql:/world"

The hostname and port are optional.

For MySQL driver: defaults are localhost and port 3306

Page 18: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Driver class names Oracle: oracle.jdbc.driver.OracleDriver MySQL: com.mysql.jdbc.Driver MS SQL Server:

com.microsoft.jdbc.sqlserver.SQLServerDriver

18

Page 19: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

19

Create JDBC statement(s) and Executing SQL Statements Statement stmt = con.createStatement() ; Creates a Statement object for sending SQL

statements to the database String createtab = "Create table stud " + "(USN VARCHAR(10), Name VARCHAR(32),

" + "Marks Integer)";stmt.executeUpdate(createtab);

String insertstud = "Insert into stud values“ +“(cs-01,aaa,89)";stmt.executeUpdate(insertstud);

Page 20: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

20

Get ResultSet

String querystud = "select * from stud";ResultSet rs =

Stmt.executeQuery(querystud);while (rs.next()) {

String usn = rs.getString(“USN");String name = rs.getString("NAME");int marks = rs.getInt("MARKS");

}

Page 21: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

ResultSet Methods for Getting Data

ResultSet "get" methods return column data:

getLong( 3 ) : get by column index (most efficient)

getLong( "population" ) : get by field name (safest)

getInt( ), getLong( ) - get Integer field valuegetFloat( ), getDouble() - get floating pt. valuegetString( ) - get Char or Varchar field valuegetDate( ) - get Date or Timestamp field valuegetBoolean( ) - get a Bit field value getBytes( ) - get Binary datagetBigDecimal( ) - get Decimal field as BigDecimalgetBlob( ) - get Binary Large ObjectgetObject( ) - get any field value

Page 22: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

22

JDBC 2 – Scrollable Result Set

JDBC 2.0 includes scrollable result sets. Additional methods included are : ‘first’, ‘last’, ‘previous’, and other methods

Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

String query = “select name from stud where type=‘not sleeping’ “;

ResultSet rs = stmt.executeQuery( query );

rs.previous(); / / go back in the RS (not possible in JDBC 1…) rs.relative(-5); / / go 5 records backrs.relative(7); / / go 7 records forwardrs.absolute(100); / / go to 100th record…

Page 23: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

23

Handling Errors with Exceptions Programs should recover and leave the database in

a consistent state. If a statement in the try block throws an exception or

warning, it can be caught in one of the corresponding catch statements

How might a finally {…} block be helpful here? E.g., you could rollback your transaction in a

catch { …} block or close database connection and free database related resources in finally {…} block

Close connection stmt.close(); pstmt.close(); rs.close(); con.close();

Page 24: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Creating mysql database, table and inserting data sql>show databases; sql>create database mydb; sql>use mydb; sql>create table admin (username varchar(15),

password varchar(15),type varchar(5)); sql>show tables; sql>insert into admin values

(‘aa1’,’Abc@123’,’user1’); sql>commit; sql>select * from admin;

24

Page 25: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

25

Sample program for DB connection

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;

public class JdbcExample1 {

public static void main(String args[]) { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", ""); if (!con.isClosed()) System.out.println("Successfully connected to MySQL server..."); } catch(Exception e) { System.err.println("Exception: " + e.getMessage()); } finally { try { if (con != null) con.close(); } catch(SQLException e) {} } }}

Page 26: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

How to Execute SQL Commands

The Statement interface defines many execute methods:

Resultset rs = statement.executeQuery("SELECT ...");

use for statements that return data values (SELECT) Returns results as a ResultSet object

int count = statement.executeUpdate("UPDATE ...");

Use for DROP TABLE, CREATE TABLE use for INSERT, UPDATE, and DELETE

boolean b = statement.execute("DROP TABLE test");

use to execute any SQL statement(s)

Page 27: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Sample program for querying the table

27

import java.sql.*;public class mysql_demo{public static void main(String[] args) {System.out.println("MySQL Connect Example.");Connection conn = null;String url = "jdbc:mysql://localhost:3306/";String dbName = "mydb";String driver = "com.mysql.jdbc.Driver";String userName = "root"; String password = "";String f1,f2,f3;try {Class.forName(driver).newInstance();conn = DriverManager.getConnection(url+dbName,userName,password);String query = "Select * FROM admin;System.out.println("Connected to the database");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(query);while (rs.next()){f1 = rs.getString(1);f2=rs.getString(2);F3=rs.getString(3)System.out.println(f1+" "+f2+" "+f3);} //end whileconn.close();System.out.println("Disconnected from database");} //end try

catch(ClassNotFoundException e) {e.printStackTrace();}}

Page 28: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

28

JDBC 2 – Updateable ResultSetStatement stmt =

conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql; sql = "SELECT username,password,type from admin";

ResultSet rs = stmt.executeQuery(sql);while (rs.next())

{

uname = rs.getString(1);mypass=rs.getString(2);

mytype=rs.getString(3);

System.out.println(uname+" "+mypass+" "+mytype);} //end while

rs.beforeFirst();

while(rs.next()){ //Retrieve by column name

String newType = "0";

rs.updateString( "type", newType ); rs.updateRow(); }

Page 29: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Using a PreparedStatementPreparedStatement uses placeholders for data

values.PreparedStatement pstmt = connection.prepareStatement(

"SELECT * FROM Country where name = ?" );

// get data for Thailand pstmt.setString( 1, “Inida");

ResultSet rs = pstmt.executeQuery( );saveResultSetAsObject( rs, country1 );

PreparedStatement will quote the string for you. Don't use '?'

Substitute “India" for placeholder #1

Page 30: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Prepared statement to insert data into the table.

Prepared statements are precompiled, hence much more efficient to use. PreparedStatement s;

s = conn.prepareStatement ( "INSERT INTO admin (username, password,type VALUES(?,?,?)");s.setString (1, uname);s.setString (2, mypass);

s.setString(3,mytype);int count = s.executeUpdate ();s.close ();System.out.println (count + " rows were inserted");

Page 31: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

JDBC prepared statementClass.forName(driver).newInstance();

conn = DriverManager.getConnection(url+dbName,userName,password);System.out.println("Connected to the database");

String qry="SELECT password FROM admin where username=?";PreparedStatement pstmt = conn.prepareStatement(qry);

uname="cs-01";

pstmt.setString(1,uname); ResultSet rs = pstmt.executeQuery ();

while (rs.next())

{f1 = rs.getString(1);

System.out.println("The password for "+uname+" is "+f1);

} //end while

conn.close();

System.out.println("Disconnected from database");

31

Page 32: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

32

JDBC

JDBC Data Access API – JDBC Technology Homepage http://java.sun.com/products/jdbc/index.html

JDBC Database Access – The Java Tutorial http://java.sun.com/docs/books/tutorial/jdbc/index.html

JDBC Documentation http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/index.html

java.sql package http://java.sun.com/j2se/1.4.2/docs/api/java/sql/package-summary.html

JDBC Technology Guide: Getting Started http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html

JDBC API Tutorial and Reference (book) http://java.sun.com/docs/books/jdbc/

Page 33: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

33

JDBC references

JDBC Data Access API – JDBC Technology Homepage http://java.sun.com/products/jdbc/index.html

JDBC Database Access – The Java Tutorial http://java.sun.com/docs/books/tutorial/jdbc/index.html

JDBC Documentation http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/index.html

java.sql package http://java.sun.com/j2se/1.4.2/docs/api/java/sql/package-summary.html

JDBC Technology Guide: Getting Started http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/GettingStartedTOC.fm.html

JDBC API Tutorial and Reference (book) http://java.sun.com/docs/books/jdbc/

Page 34: Java DataBase Connectivity - csejavalab.files.wordpress.com fileJDBC – Java DataBase Connectivity Accessing a Database in Java. 2 What is JDBC? JDBC helps us to connect to a database

Exercises

Develop a simple JDBC application to store the details of an employee in a table and display it on the console.

Create a database called student with table name as ‘studinfo’ having the attributes name, USN branch, quota (CET or COMED_K). Write a JDBC program to extract the students who are admitted through CET and branch is CSE. Display the results in a proper format.

34