Java DataBase Connectivity (JDBC)Agenda :JDBC API
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConnect {
public static void main(String[] args) throws SQLException {
//step 1: Register the driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
System.out.println("driver is registered");
//step 2: get the connection from the DataBase
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
System.out.println("I got the connection object is : "+ con);
Statement stmt=con.createStatement();
System.out.println("create the statement object :"+stmt);
System.out.println("Sending the Query to DB for executing it");
stmt.executeUpdate("create table emp(eno number(5),name varchar2(25),
address varchar2(25),salary number(10,2),doj date)");
System.out.println("table is created");
}
}
InsertRecord :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertRecord {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement();
stmt.executeUpdate(
"insert into emp values(1,'ashok','HYD',1000,'05-Jan-2020')");
System.out.println("insert");
}
}
Retrieve Record :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class RetrieveRecord {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement();
String query="select * from emp";
ResultSet rs=stmt.executeQuery(query);
while(rs.next()){
System.out.println(rs.getInt("eno"));
System.out.println(rs.getString("name"));
System.out.println(rs.getDouble("salary"));
System.out.println(rs.getDate("doj"));
}
System.out.println("retrieve");
}
}
PreparedStatement "improve the performance" of our application. Prepared Statement :
package com.jdbc;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
PreparedStatement pstmt=con.prepareStatement(
"insert into emp values(?,?,?,?,?)");
pstmt.setInt(1, 6);
pstmt.setString(2, "Arun");
pstmt.setString(3, "HYD");
pstmt.setDouble(4, 6000);
pstmt.setDate(5, new Date(05-07-2020));
pstmt.executeUpdate();
System.out.println("retrieve");
}
}
Update Record :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
PreparedStatement pstmt=con.prepareStatement(
"update emp set name=? where eno=?");
pstmt.setString(1, "Ramudu");
pstmt.setInt(2, 6);
int i=pstmt.executeUpdate();
System.out.println("update records : "+i);
}
}
Retrieve Record :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PreparedStatementDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
String query="select * from emp where eno=?";
PreparedStatement pstmt=con.prepareStatement(query);
pstmt.setInt(1, 6);
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt("eno"));
System.out.println(rs.getString("name"));
System.out.println(rs.getString("address"));
System.out.println(rs.getDouble("salary"));
System.out.println(rs.getDate("doj"));
}
System.out.println("retrieve records");
}
}
CallableStatement :
SQL> create table product(pid number(5),
pname varchar2(15),price number(10,2));
SQL> create or replace procedure myproc 2 as 3 begin 4 insert into product values(1,'pone',1000); 5 end myproc; 6 / Procedure created. SQL> exec myproc; PL/SQL procedure successfully completed. Procedures with Parameters :
SQL> create or replace procedure myprocedure(vpid in number,
vpname in varchar2,vprice in number)
2 as
3 begin
4 insert into product values(vpid,vpname,vprice);
5 end myprocedure;
6 /
Procedure created.
SQL> exec myprocedure(2,'ptwo',2000);
PL/SQL procedure successfully completed.
A procedure can take 2 different types of inputs. They are
The procedure should be able to add 2 input parameters and place the result in output parameter
SQL> create or replace procedure myprocadd(no1 in number,
no2 in number,result out number)
2 as
3 begin
4 result := no1+no2;
5 end myprocadd;
6 /
Procedure created.
SQL> variable vresult number;
SQL> exec myprocadd(10,20, :vresult);
PL/SQL procedure successfully completed.
SQL> print vresult;
VRESULT
----------
30
Advantages of Procedures :
Procedure to use CallableStatement, CallableStatements are use to execute the procedure:
package com.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CallProcedureDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
CallableStatement cstmt=con.prepareCall("{call myproc}");
cstmt.execute();
con.close();
System.out.println("procedures");
}
}
Example of JDBC program which calls the procedure with parameters :
package com.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CallProcedureDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
CallableStatement cstmt=con.prepareCall("{call myprocedure(?,?,?)}");
cstmt.setInt(1, 5);
cstmt.setString(2, "Ashok");
cstmt.setDouble(3, 5000);
cstmt.execute();
con.close();
System.out.println("procedures");
}
}
Example of JDBC program which calls the procedure, which having in & out parameters :
package com.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class CallProcedureDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
CallableStatement cstmt=con.prepareCall("{call myprocadd(?,?,?)}");
cstmt.setInt(1,5);
cstmt.setInt(2,15);
cstmt.registerOutParameter(3, Types.NUMERIC);
cstmt.execute();
System.out.println(cstmt.getInt(3));
con.close();
System.out.println("procedures");
}
}
There are 2 types of ResultSets in JDBC
Note : These instance variables are available in ResultSet interface
We can supply the following variables as ResultSet concurrency values.
Note : These variables are available in ResultSet interface. By default the ResultSet object takes arguments TYPE_FORWARD_ONLY and CONCUR_READ_ONLYSensitive ResultSet :Whenever any change in the DataBase the change is immediately reflect to the java application.Insensitive ResultSet :After the java program aquire the data if there are any change in the DataBase, those changes will not reflected in our java application.Concurrent Updatable :
The following java program is Insensitive java program :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class InsensitiveDemo {
public static void main(String[] args) throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery("select * from product");
rs.next();
System.out.println(rs.getRow());
rs.previous();
System.out.println(rs.getRow());
rs.absolute(5);
System.out.println(rs.getRow());
System.out.println("Insensitive");
}
}
As part of JDBC-API absolute() helps moves to a specific record in the ResultSet object. Ex :rs.absolute(5); //will move the ResultSet pointer to 5th record The following java program is Sensitive java program :
package com.jdbc;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SensitiveDemo {
public static void main(String[] args)
throws SQLException, IOException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery("select pid,pname,price from product");
while(rs.next()){
System.out.println("press any key to get the next record");
System.in.read();
rs.refreshRow();
System.out.println(rs.getString(1)+"\t");
System.out.println(rs.getString(2)+"\t");
System.out.println(rs.getString(3)+"\t");
System.out.println("\n");
}
System.out.println("Sensitive");
}
}
package com.jdbc;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SensitiveDemo {
public static void main(String[] args)
throws SQLException, IOException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery("select pid,pname,price from product");
rs.next();
rs.updateString("price","7000");
rs.updateRow();
//rs.deleteRow();
System.out.println("update/delete");
}
}
rs.moveToInsertRow();
rs.updateString("pid",98);
Transactions :Executing the sequence of Queries is called "Transaction".
SQL> create table account(acno number(9),balance number(10,2)); SQL> insert into account values(123,100000.0); SQL> insert into account values(456,0);Transaction demo program :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TransactionDemo {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
con.setAutoCommit(false);
try{
Statement stmt=con.createStatement();
stmt.executeUpdate("update account set balance=90000 where acno=123");
con.commit();
System.out.println("transaction is successfull");
}
catch(Exception e){
System.out.println("transaction is not successfull");
con.rollback();
}
System.out.println("success");
}
}
Batch Update :
The following JDBC program is an example of batch updates :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class BatchUpdateDemo {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","lms","scott");
Statement stmt=con.createStatement();
String q1="insert into product values(1,'pone',1000)";
stmt.addBatch(q1);
String q2="insert into product values(2,'ptwo',2000)";
stmt.addBatch(q2);
String q3="insert into product values(3,'pthree',3000)";
stmt.addBatch(q3);
int a[]=stmt.executeBatch();
System.out.println("Array size is : "+a.length);
}
}
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class RemoveHardCodeDemo {
public static void main(String[] args)
throws SQLException, ClassNotFoundException {
String driverName=System.getProperty("");
String url=System.getProperty("url");
String uname=System.getProperty("uname");
String pwd=System.getProperty("pwd");
Class.forName(driverName);
Connection con=DriverManager.getConnection(url, uname, pwd);
System.out.println(con);
}
}
//oracle database
C:\>javac RemoveHardCodeDemo.java
C:\>java -Ddrv=oracle.jdbc.driver.OracleDriver
-Durl=jdbc:oracle:thin:@localhost:1521:xe
-Duname=lms
-Dpwd=abc
RemoveHardCodeDemo
The above program is able to remove the hard coded values of driverName, url, uname, pwd.
package oracle.jdbc.driver;
public class OracleDriver implements Driver{
static{
OracleDriver o=new OracleDriver();
DriverManager.registerDriver(o);
}
-------
-------
}
Another way of register the driver and remove hard coding.
Class c=Class.forName(driverName); Object o=c.new Instance(); Driver d=(Driver)o; DriverManager.registerDriver(d);or Class.forName(driverName);This way is used for create the driver class object dynamically. Meta Data :
<name>Ashok</name> <age>25</age> <address>HYD</address> DataBaseMetaData :
package com.jdbc;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnectDemo {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "lms", "scott");
DatabaseMetaData dbmd=con.getMetaData();
System.out.println(dbmd.getDatabaseMajorVersion());
System.out.println(dbmd.getDatabaseMinorVersion());
System.out.println(dbmd.getUserName());
System.out.println(dbmd.getDriverMajorVersion());
System.out.println(dbmd.getDriverMinorVersion());
}
}
ResultSetMetaData :
Types :
Develop JDBC program which retrieves all the records from product tablewe can use i-net jdbc driverOur JDBC application must tell about the names of the columns of the ResultSet, Data types of the ResultSet for user.
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
public class DBConnectDemo {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new com.inet.ora.OracleDriver());
Connection con=DriverManager.getConnection(
"jdbc:inetora:localhost:1521:xe", "lms", "scott");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from product");
ResultSetMetaData rsmd=rs.getMetaData();
for(int i=1;i<=rsmd.getColumnCount();i++){
System.out.println("column name:"+rsmd.getColumnName(i));
int CType=rsmd.getColumnType(i);
if(CType==Types.INTEGER){
System.out.println("column type:INTERGER");
}
if(CType==Types.VARCHAR){
System.out.println("column type:VARCHAR");
}
if(CType==Types.DECIMAL){
System.out.println("column type:DECIMAL");
}
} //for
}//main
}//class
4 Types of JDBC drivers :
Type 1 driver : (JDBC-ODBC bridge)The following Architecture of Type 1 driver![]() If we want to develop a JDBC application which talks to DB
Procedure to configure ODBC driver :
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBTypeOne {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
Connection con=DriverManager.getConnection(
"jdbc:odbc:myjdbcds", "lms", "scott");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from product");
while(rs.next()){
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
}
}
Advantages of Type 1 driver :Type 1 driver is used to connect any database server without finding the new JDBC driver.Type 2 driver : (Java Native API)![]()
Dis advantages :
Advantages :Performance of this driver is better than any of the driver .Note : It is very difficult to use Type 1, Type 2 drivers in web-based applications. Type 3 driver : (Java Network Protocol driver)![]()
Advantages :
Dis-Advantages :We need to buy the software (not for free of cost).Type 4 driver : (Thin Driver or Pure Java Driver)![]()
Advantages :
Dis-Advantages :
|