1 JDBC
1 JDBC
Chapter 1
Objectives
On completion of this session you will be able to:
State purpose of JDBC API.
Describe 4 types of JDBC drivers and their typical
characteristics with usage.
State functionality of important classes in JDBC
package.
Use JDBC Statement to execute SQL queries.
Use JDBC Prepared statement to execute
parameterized queries.
Use JDBC Callable Statement to invoke stored
procedures.
Understand how to deal with BLOB/CLOB type of
data
Understand the batch updates in JDBC
Understand JDBC transaction
JDBC
Driver Oracle
DB
Driver MS-Access
DB
ResultSet ResultSet ResultSet
Application Connection
DriverManager
ODBC Driver
Oracle Sybase
Database Database
Access
Database
JDBC(Drivers)
JDBC-ODBC Bridge (Type 1)
Native-API partly Java Driver (Type 2)
Net-Protocol All-Java Driver (Type 3)
Native Protocol All-Java Driver (Type 4)
JDBC ODBC
ODBC Driver API Database
Java JDBC
Vendor API
Application API
JDBC
Driver Database
Database
JDBC
Driver
JDBC
Java JDBC Driver
API
Client (Pure Java)
Database
Class.forName(“sun.jdbc.odbc.JdbcOdbcDrive
r”);
Properties p = new Properties();
p.put(“user”,”dba”);
p.put(“password”,”sql”);
String url = “jdbc:odbc:mytable”;
Connection c =
DriverManager.getConnection(url,p);
}
JDBC URL
Needed by drivers to locate, access and get
other valid information about the databases
jdbc:driver:database-name
jdbc:Oracle:products
jdbc:odbc:mydb; uid = aaa; pwd = secret
jdbc:odbc:Sybase
jdbc:odbc://whitehouse.gov.5000/cats
jdbc:odbc:<DB>
oracle.jdbc.driver.OracleDriver
JDBC(Interfaces)
Driver
Connection
Statement
PreparedStatement
CallableStatement
DatabaseMetadata
ResultSet
ResultSetMetadata
JDBC(Classes)
Date
DriverManager
DriverPropertyInfo
Time
TimeStamp
Types
Driver Interface
Connection connect(String URL, Properties
info):
checks to see if URL is valid
opens a TCP connection to host & port
number specified
returns an instance of Connection object
Boolean acceptsURL(String URL)
Driver Manager class
Connection getConnection(String URL)
void registerDriver(Driver driver)
void deregisterDriver()
PreparedStatement
CallableStatement
Statement Methods
boolean execute(String sql)
ResultSet executeQuery(String sql)
int executeUpdate(String sql)
JDBC( Simple Query)
String url = “jdbc:odbc:MyDataSource”
Connection con =
DriverManager.getConnection( url);
Statement stmt = con.createStatement();
String sql = “SELECT Last_Name FROM
EMPLOYEES”;
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{ System.out.println(rs.getString(“Last
_Name”));
}
JDBC ( executing DML statement)
String url = “jdbc:odbc:MyDataSource”
Connection con =
DriverManager.getConnection( url);
Statement stmt = con.createStatement();
String sql=“insert into employee(empno,
empname,designation,salary)
values(5,'rrr','manager',11000)";
int updateRowCount=stmt.executeUpdate(sql);
JDBC(Parameterised SQL)
String SQL =
“select * from Employees where
First_Name=?”;
PreparedStatement pstat =
con.prepareStatement(sql);
pstat.setString(1, “John”);
ResultSet rs = pstat.executeQuery();
pstat.clearParameters();
JDBC (Stored Procedure)
CallableStatement cstmt =
con.prepareCall( “{ call sp_product(?,?)}
”);
cstmt.setInt(1,id);
cstmt.setFloat(2, 5888.86);
cstmt.registerOutParameter(2,Types.FLOAT);
cstmt.execute();
System.out.println(cstmt.getFloat(2));
Creating JDBC 2.0
Resultset
Statement stmt =
conn.createStatement(type,concurrency);
TYPE_FORWARD_ONLY
TYPE_SCROLL_INSENSITIVE
TYPE_SCROLL_SENSITIVE
CONCUR_READ_ONLY
CONCUR_UPDATEABLE
Scrollable & Updatable
ResultSet
Cursor Movement (Scrolling) Methods
first()
last()
next()
previous()
beforeFirst()
afterLast()
absolute( int )
relative( int )
Scrollable & Updatable ResultSet
Update a row
Statement stmt =
con.createStatement(ResultSet.TYPE_SCROLL_
SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs.first();
rs.updateInt(2, 75858 );
rs.updateRow();
Scrollable & Updatable
ResultSet
Insert and delete a row
ResultSet rs = stmt.executeQuery(“Select
….”);
rs.moveToInsertRow();
rs.updateString(1, “fkjafla” );
rs.updateInt(2, 7686);
rs.insertRow();
rs.last();
rs.deleteRow();
ResultSetMetadata Interface
ResultSetMetaData represents structure of
any ResultSet Object
It can be used to create generic code which
can be used with any ResultSet Object
DatabaseMetadata Interface
DatabaseMetaData represents
configuration, system structure, capabilities
of a database.
It can be used to create generic application
which deals with multiple databases.
Utilities that can be developed around it:
retrieve all table names
retrieve capabilities of database like SQL.
keyword supported, privileges etc.
retrieve indexes created.
JDBC(BLOB)
Following code snippet will insert an image
in to a database.
FileInputStream fin=new
FileInputStream(f);
PreparedStatement
pstat=con.prepareStatement("Insert into
Emp values(?,?,?,?)");
pstat.setString(1,name);
pstat.setInt(2,id);
pstat.setDouble(3,salary);
pstat.setBinaryStream(4,fin,
(int)length);
pstat.executeUpdate();
JDBC(BLOB)
Following code snippet will retrieve an
image from a database.
Statement
stmt=con.createStatement(“select * from
Emp”);
ResultSet rs=stmt.executeQuery( );
while(rs.next( )){
System.out.println(rs.getString(1));
System.out.println(rs.getInt(2));
System.out.println(rs.getDouble(3));
InputStream
in=rs.getBinaryStream(4);
……………..
}
JDBC(Batch Updates)
Statement stmt=con.createStatement();
stmt.addBatch(sql1);
stmt.addBatch(sql2);
stmt.addBatch(sql3);
stmt.executeBatch();
JDBC (Transactions)
TRANSACTION_NONE