T.DEEPIKA
I.MSC (CS)
DEPARTMENT OF CS & IT
NADAR SARASWATHI COLLEGE OF ARTS AND
SCIENCE,
THENI.
 “An API that lets you access virtually any tabular data
source from the Java programming language”
 JDBC Data Access API – JDBC Technology Homepage.
What’s a tabular data source?
 “… access virtually any data source, from relational
databases to spreadsheets and flat files.”
 JDBC Documentation
 We’ll focus on accessing Oracle databases
2
 What design pattern is
implied in this
architecture?
 What does it buy for us?
 Why is this architecture
also multi-tiered?
3
4
 1.Establish a connection
 2.Create JDBC Statements
 3.Execute SQL Statements
 4.GET ResultSet
 5.Close connections
5
 import java.sql.*;
 Load the vendor specific driver
 Class.forName("oracle.jdbc.driver.OracleDriver");
 What do you think this statement does, and how?
 Dynamically loads a driver class, for Oracle database
 Make the connection
 Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@oracle-prod:1521:OPROD", username,
passwd);
 What do you think this statement does?
 Establishes connection to database by obtaining
a Connection object
6
 Statement stmt = con.createStatement() ;
 Creates a Statement object for sending SQL statements
to the database
7
 String createLehigh = "Create table Lehigh " +
"(SSN Integer not null, Name VARCHAR(32), "
+ "Marks Integer)";
stmt.executeUpdate(createLehigh);
//What does this statement do?
 String insertLehigh = "Insert into Lehigh
values“ + "(123456789,abc,100)";
stmt.executeUpdate(insertLehigh);
8
String queryLehigh = "select * from Lehigh";
ResultSet rs = Stmt.executeQuery(queryLehigh);
//What does this statement do?
while (rs.next()) {
int ssn = rs.getInt("SSN");
String name = rs.getString("NAME");
int marks = rs.getInt("MARKS");
}
9
 stmt.close();
 con.close();
10
 JDBC allows SQL statements to be grouped together into a
single transaction
 Transaction control is performed by the Connection object,
default mode is auto-commit, I.e., each sql statement is treated
as a transaction
 We can turn off the auto-commit mode with
con.setAutoCommit(false);
 And turn it back on with con.setAutoCommit(true);
 Once auto-commit is off, no SQL statement will be committed
until an explicit is invoked con.commit();
 At this point all changes done by the SQL statements will be
made permanent in the database.
11
 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
12
13
What’s a bit different
about this
architecture?
Why add yet
another layer?
import java.sql.*;
class Test {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //dynamic loading of driver
String filename = "c:/db1.mdb"; //Location of an Access database
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;READONLY=true}"; //add on to
end
Connection con = DriverManager.getConnection( database ,"","");
Statement s = con.createStatement();
s.execute("create table TEST12345 ( firstcolumn integer )");
s.execute("insert into TEST12345 values(1)");
s.execute("select firstcolumn from TEST12345");
14
ResultSet rs = s.getResultSet();
if (rs != null) // if rs == null, then there is no ResultSet to view
while ( rs.next() ) // this will step through our data row-by-row
{ /* the next line will get the first column in our current row's ResultSet
as a String ( getString( columnNumber) ) and output it to the screen */
System.out.println("Data from column_name: " + rs.getString(1) );
}
s.close(); // close Statement to let the database know we're done with it
con.close(); //close connection
}
catch (Exception err) { System.out.println("ERROR: " + err); }
}
}
15
16
…
Statement stmt =
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String query = “select students from class 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 back
rs.relative(7); / / go 7 records forward
rs.absolute(100); / / go to 100th record
…
17
…
Statement stmt =
con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
String query = " select students, grade from class
where type=‘really listening this presentation’ “;
ResultSet rs = stmt.executeQuery( query );
…
while ( rs.next() )
{
int grade = rs.getInt(“grade”);
rs.updateInt(“grade”, grade+10);
rs.updateRow();
}
18
 A Connection's database is able
to provide schema information
describing its tables,
its supported SQL grammar,
its stored procedures
the capabilities of this connection, and so on
 What is a stored procedure?
 Group of SQL statements that form a logical unit and
perform a particular task
This information is made available through
a DatabaseMetaData object.
19
…
Connection con = …. ;
DatabaseMetaData dbmd = con.getMetaData();
String catalog = null;
String schema = null;
String table = “sys%”;
String[ ] types = null;
ResultSet rs =
dbmd.getTables(catalog , schema , table , types );
…
20
public static void printRS(ResultSet rs) throws SQLException
{
ResultSetMetaData md = rs.getMetaData();
// get number of columns
int nCols = md.getColumnCount();
// print column names
for(int i=1; i < nCols; ++i)
System.out.print( md.getColumnName( i)+",");
/ / output resultset
while ( rs.next() )
{ for(int i=1; i < nCols; ++i)
System.out.print( rs.getString( i)+",");
System.out.println( rs.getString(nCols) );
}
} 21
 (JNDI) Java Naming and Directory Interface
 API for network-wide sharing of information about users,
machines, networks, services, and applications
 Preserves Java’s object model
 (JDO) Java Data Object
 Models persistence of objects, using RDBMS as repository
 Save, load objects from RDBMS
 (SQLJ) Embedded SQL in Java
 Standardized and optimized by Sybase, Oracle and IBM
 Java extended with directives: # sql
 SQL routines can invoke Java methods
 Maps SQL types to Java classes
22
 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/
24
 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/
25

Jdbc ja

  • 1.
    T.DEEPIKA I.MSC (CS) DEPARTMENT OFCS & IT NADAR SARASWATHI COLLEGE OF ARTS AND SCIENCE, THENI.
  • 2.
     “An APIthat lets you access virtually any tabular data source from the Java programming language”  JDBC Data Access API – JDBC Technology Homepage. What’s a tabular data source?  “… access virtually any data source, from relational databases to spreadsheets and flat files.”  JDBC Documentation  We’ll focus on accessing Oracle databases 2
  • 3.
     What designpattern is implied in this architecture?  What does it buy for us?  Why is this architecture also multi-tiered? 3
  • 4.
  • 5.
     1.Establish aconnection  2.Create JDBC Statements  3.Execute SQL Statements  4.GET ResultSet  5.Close connections 5
  • 6.
     import java.sql.*; Load the vendor specific driver  Class.forName("oracle.jdbc.driver.OracleDriver");  What do you think this statement does, and how?  Dynamically loads a driver class, for Oracle database  Make the connection  Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@oracle-prod:1521:OPROD", username, passwd);  What do you think this statement does?  Establishes connection to database by obtaining a Connection object 6
  • 7.
     Statement stmt= con.createStatement() ;  Creates a Statement object for sending SQL statements to the database 7
  • 8.
     String createLehigh= "Create table Lehigh " + "(SSN Integer not null, Name VARCHAR(32), " + "Marks Integer)"; stmt.executeUpdate(createLehigh); //What does this statement do?  String insertLehigh = "Insert into Lehigh values“ + "(123456789,abc,100)"; stmt.executeUpdate(insertLehigh); 8
  • 9.
    String queryLehigh ="select * from Lehigh"; ResultSet rs = Stmt.executeQuery(queryLehigh); //What does this statement do? while (rs.next()) { int ssn = rs.getInt("SSN"); String name = rs.getString("NAME"); int marks = rs.getInt("MARKS"); } 9
  • 10.
  • 11.
     JDBC allowsSQL statements to be grouped together into a single transaction  Transaction control is performed by the Connection object, default mode is auto-commit, I.e., each sql statement is treated as a transaction  We can turn off the auto-commit mode with con.setAutoCommit(false);  And turn it back on with con.setAutoCommit(true);  Once auto-commit is off, no SQL statement will be committed until an explicit is invoked con.commit();  At this point all changes done by the SQL statements will be made permanent in the database. 11
  • 12.
     Programs shouldrecover 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 12
  • 13.
    13 What’s a bitdifferent about this architecture? Why add yet another layer?
  • 14.
    import java.sql.*; class Test{ public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //dynamic loading of driver String filename = "c:/db1.mdb"; //Location of an Access database String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="; database+= filename.trim() + ";DriverID=22;READONLY=true}"; //add on to end Connection con = DriverManager.getConnection( database ,"",""); Statement s = con.createStatement(); s.execute("create table TEST12345 ( firstcolumn integer )"); s.execute("insert into TEST12345 values(1)"); s.execute("select firstcolumn from TEST12345"); 14
  • 15.
    ResultSet rs =s.getResultSet(); if (rs != null) // if rs == null, then there is no ResultSet to view while ( rs.next() ) // this will step through our data row-by-row { /* the next line will get the first column in our current row's ResultSet as a String ( getString( columnNumber) ) and output it to the screen */ System.out.println("Data from column_name: " + rs.getString(1) ); } s.close(); // close Statement to let the database know we're done with it con.close(); //close connection } catch (Exception err) { System.out.println("ERROR: " + err); } } } 15
  • 16.
  • 17.
    … Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); Stringquery = “select students from class 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 back rs.relative(7); / / go 7 records forward rs.absolute(100); / / go to 100th record … 17
  • 18.
    … Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); Stringquery = " select students, grade from class where type=‘really listening this presentation’ “; ResultSet rs = stmt.executeQuery( query ); … while ( rs.next() ) { int grade = rs.getInt(“grade”); rs.updateInt(“grade”, grade+10); rs.updateRow(); } 18
  • 19.
     A Connection'sdatabase is able to provide schema information describing its tables, its supported SQL grammar, its stored procedures the capabilities of this connection, and so on  What is a stored procedure?  Group of SQL statements that form a logical unit and perform a particular task This information is made available through a DatabaseMetaData object. 19
  • 20.
    … Connection con =…. ; DatabaseMetaData dbmd = con.getMetaData(); String catalog = null; String schema = null; String table = “sys%”; String[ ] types = null; ResultSet rs = dbmd.getTables(catalog , schema , table , types ); … 20
  • 21.
    public static voidprintRS(ResultSet rs) throws SQLException { ResultSetMetaData md = rs.getMetaData(); // get number of columns int nCols = md.getColumnCount(); // print column names for(int i=1; i < nCols; ++i) System.out.print( md.getColumnName( i)+","); / / output resultset while ( rs.next() ) { for(int i=1; i < nCols; ++i) System.out.print( rs.getString( i)+","); System.out.println( rs.getString(nCols) ); } } 21
  • 22.
     (JNDI) JavaNaming and Directory Interface  API for network-wide sharing of information about users, machines, networks, services, and applications  Preserves Java’s object model  (JDO) Java Data Object  Models persistence of objects, using RDBMS as repository  Save, load objects from RDBMS  (SQLJ) Embedded SQL in Java  Standardized and optimized by Sybase, Oracle and IBM  Java extended with directives: # sql  SQL routines can invoke Java methods  Maps SQL types to Java classes 22
  • 23.
     JDBC DataAccess 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/ 24
  • 24.
     JDBC DataAccess 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/ 25