4 jdbc step1

79
OBTAINING A CONNECTION TO DATABASE • Approach1: Directly using Driver object

description

http://rajjdbc.blogspot.in/

Transcript of 4 jdbc step1

Page 1: 4 jdbc step1

OBTAINING A CONNECTION TO DATABASE

• Approach1: Directly using Driver object

Page 2: 4 jdbc step1

OBTAINING A CONNECTION TO DATABASE

Page 3: 4 jdbc step1

STEP 1(approach1) 1.JPG

Page 4: 4 jdbc step1

/*Jdbc first Example we want to write a java program to create a new record with the following values

into the database table

emp: empno: 101 ename: e101 salary:1000 deptno:10Considering the following table in oracle database to existcreate table emp(empno number, ename varchar2(20), sal number(10,2), deptno

number); */

Page 5: 4 jdbc step1

//JdbcExample1.java

• //JdbcExample1.javaimport java.sql.*;import java.util.Properties;public class JdbcExample1{ public static void main(String args[]) throws Exception { //we want to create a new record, to do this we want to execute the following sql to the database String sql="insert into emp values(101,'e101',1000,10)"; String driverClassName="oracle.jdbc.driver.OracleDriver"; Class c=Class.forName(driverClassName); Driver d=(Driver)c.newInstance(); //STEP 1.2: TYPE -2 DRIVER, thin is a name of the driver String JdbcUrl="jdbc:oracle:thin:@localhost:1521:XE"; Properties dbprops=new Properties(); dbprops.put("user","system"); dbprops.put("password","manager"); Connection con=d.connect(JdbcUrl,dbprops); Statement st=con.createStatement(); st.executeUpdate(sql); //step 4: con.close(); System.out.println("record is saved"); }}

Page 6: 4 jdbc step1

Work flow of JDBC

Page 7: 4 jdbc step1
Page 8: 4 jdbc step1
Page 9: 4 jdbc step1
Page 10: 4 jdbc step1
Page 11: 4 jdbc step1
Page 12: 4 jdbc step1
Page 13: 4 jdbc step1
Page 14: 4 jdbc step1
Page 15: 4 jdbc step1
Page 16: 4 jdbc step1
Page 17: 4 jdbc step1
Page 18: 4 jdbc step1

How to run this program:

/*you need to have the following softwares installed in the machine: (1) JDK (2) Oracle DBNow perform the following to get this example run:

(1) create the table in the DB:

We can run the above mentioned create table SQL Statement using the SQL* plus Editor.

(2) set ojdbc14.jar (or) ojdbc5.jar (or) ojdbc6.jar into the classpath.

we can find this jar file in the oracle install folder.

Page 19: 4 jdbc step1

Note

: In this example we are working with Oracle's JDBC Type-4 DriverNote: (b)Here our intention is to execute the query that is step 4

( executeUpdate(sql))But it is Method method of statement so I must crate Statement

object to execute the Query, here Statement object acts as a vehicle which carries sql query to Database

So I’m creating Statement object, for creating statement object I must call createStatement() method, which is a member method of Connection object.

So for to do this we are creating Connection object

Page 20: 4 jdbc step1

Q:What is classpath?

classpath: is a system variable to specify the location of resources (Ex: .class) to locate by the java

compiler & the Application class Loader

Page 21: 4 jdbc step1

Q:How to set class path? It depends on Operating System:

In windows: (1) using system environment variables setting

window (2) using 'set' internal command

Page 22: 4 jdbc step1

D:\material\java(E DRIVE)\java\AdvJava\jdbc>javac JdbcExample1.java

D:\material\java(E DRIVE)\java\AdvJava\jdbc>set classpath=c:\oraclexe\app\o..... ;.;

Q: why .(dot) directory should be specified in the classpath?Ans: Because classloader tries to search even our current program (Ex: JdbcExample1.class) file in the Oracle

install folder which we are specifieing, but this is our program which is available only E: drive..with

some other location so we will get error, to avoid this problem we are informing to the class loader that

our current program (Ex: JdbcExample1.class) is available in the current directory (ie. Ex:

D:\material\java(E DRIVE)\java\AdvJava\jdbc)

Q: What are The possible problems we may get in running this program?Ans: 1. ClassNotFoundException: oracle.jdbc.driver.OracleDriver to solve this problem we just need to set ojdbc.jar file into the classpath.

Page 23: 4 jdbc step1

2. TNS: listener does not currently know of SID: THIS error is raised when we use wrong service id in the URL. How to find the correct ServiceId? Ans: we have multiple ways, the one simple way is find it from the

Windows Services

(control->services->OracleServiceXE..) We find a service with the name OracleService<ServiceID> (Ex: ServiceID=XE)

Page 24: 4 jdbc step1

Q: What are the changes can be done to work with Oracle's JDBC TYPE-2 Driver?

Page 25: 4 jdbc step1

Q: What are the changes can be done to work with Oracle's JDBC TYPE-2 Driver?

Ans: The Oracle's JDBC Driver Type-2 and Type-4 Drivers

are implemented into a single Driver implmentation

class so we don't need to change the driver class. Only that we need to change is JDBCURL. In the previous example (i.e: JdbcExample1.java)

change the JDBC URL to: String JdbcUrl="jdbc:oracle:oci:@XE";

Page 26: 4 jdbc step1

Q: HOW TO RUN THIS PROGRM (USING TYPE-2)?

Ans: classpath same as described earlier: In addition we need to set the oracle bin folder

into path: set path=c:\oraclexe\app\product\10.0.2\

server\bin;%path% */

Page 27: 4 jdbc step1

Q:what is %path%?

• • Ans: now we are setting the class path that

means already we may set other class path also, but I don’t want to overwrite previous class path, I want to concatenate the previous class path , that can be done by using this %path%

Page 28: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 29: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 30: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 31: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 32: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 33: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 34: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 35: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 36: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 37: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 38: 4 jdbc step1

Using JDBC in the Project (Project Architecture)

Page 39: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 40: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 41: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 42: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 43: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 44: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 45: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 46: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 47: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 48: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 49: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 50: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 51: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 52: 4 jdbc step1

Using JDBC in the Project (Project Architecture)with DAO Design Pattern

Page 53: 4 jdbc step1

What is Low Level Persistence Logic?

• Low Level means it is specific to one type of dependent persistence logic• Persistence Logic: is responsible for accessing persistence Data• If I’m using low level persistence logic in Business Logic (i.e High Level

Logic) so I can not connect to all the Back end servers.• To avoid this problem we have to use another layer , keep the persistence

logic in a separate object, that object is nothing but a Data Access Object (DAO).

• • SO here DAO is a Design Pattern, Design Pattern which gives a solution for

a problem.• (Example: I’m facing a problem, I will try to interact with a friend who is

already faced the problem because he will have ready made solution for that problem, no need to waste my time to solve the problem, because already ready made solution (design pattern) is available

Page 54: 4 jdbc step1

What is Low Level Persistence Logic?

Page 55: 4 jdbc step1

Introducing DAO

• When it comes into the project (enterprise application) we need to concentrate in optimizing the code, making the more reusable, and also testable.

• The DAO is the most common pattern implemented into the enterprise applications.

Page 56: 4 jdbc step1

What is a Pattern?

• Pattern is a three part document that describes the context (situation), reoccurring problem and the best solution for the problem in the given context (situation).

• The software patterns are categorized into multiple type for convenience in learning and applying.

• The design patterns is one of the category. This lists the patterns describing the problems related to design and development of the software applications

Page 57: 4 jdbc step1

THE DAO DESIGN PATTERN:

• • As the title describes this is a design pattern• Context (situation):• We want to create enterprise Application with reasonable business logic having a requirement of accessing

multiple (variety) of datastore and /or found that may have a requirement of migrating from one type of data store (database) to other. Easy to migrate between the different types of data stores. That is in my application I want to connect to LDAP to take credentials, same application I want to connect to File Systems to accept login details.

• Problem:• We want to separate the low-level persistence (data access) logic from Business Logic. But this so this solution

leaves a problem that is how do you separate in a best way? Thus this solution we kept in a problem.• Forces: (Why):• We want to have a proper responsibility division that is:• (a) improves the quality of the system.• (b) reduces the cost and time for the development• To enable unit testing, make the system more comfortable for testing.• Easy to migrate between the different types of data stores.• Solution:• Implement the low-level persistence logic into a separate object, exposing the data access operations through

high-level API to the service layer.

Page 58: 4 jdbc step1

What is DAO ?

• Ans: DAO is a design pattern that describes separating the low-level persistence logic from the business logic, implementing into a separate (independent) object.

• • Note: this special object introduced

implementing the DAO pattern is also refered as a DAO i.e: Data Access Object

Page 59: 4 jdbc step1
Page 60: 4 jdbc step1

• From this discussion and the above architecture we understand JDBC is used for implementing the DAO in Java for accessing the tabular data store

Page 61: 4 jdbc step1

Use Case diagram of our project

Page 62: 4 jdbc step1

Implementing DAO Design Pattern in our project

Page 63: 4 jdbc step1

Implementing the Data Access Layer for ‘CreateEmployee’ use case of ‘Employee Management System (EMS).

• For Example:• Implementing the Data Access Layer for ‘CreateEmployee’ use case of ‘Employee Management System (EMS).• • //EmployeeDAOI.java• package com.st.ems.dao;• public interface EmployeeDAOI• {• void save(int eno,String name, double sal, int dno);• //we will change this struture later• //we will add some more methods as we proceed• }• • • //EmployeeDAO.java• package com.st.ems.dao.jdbc;• import com.st.ems.dao.EmployeeDAOI;• import java.sql.*;• import java.util.*;• public class EmployeeDAO implements EmployeeDAOI• {• public void save(int eno, String name,double sal, int dno)• {• //this method is responsible for saving the given details into emp table• //to do: execute the following SQL• String sql="insert into emp values("+eno+",'"+name+",',"+sal+","+dno+")";

Page 64: 4 jdbc step1

• //how to execute?• //use JDBC• //Write this Connection con=null here only to make visible to all the blocks• Connection con=null;//null is necessary whn u r declaring as a local variable• try• {• //step 1.1• String driverClassName="oracle.jdbc.driver.OracleDriver";//here we are using oracle driver• Class c=Class.forName(driverClassName);• Driver d=(Driver)c.newInstance();• //step 1.2• String jdbcUrl="jdbc:oracle:thin:@localhost:1521:XE";• Properties p=new Properties();• p.put("user","system");• p.put("password","manager");• //Connection con=null;//i can not use con ref variable in finally block as it is local to this • block• •

Page 65: 4 jdbc step1

• con=d.connect(jdbcUrl,p);• //step2• Statement st=con.createStatement();• //step3• st.executeUpdate(sql);• • • }//end of try block• catch(Exception e)• {• e.printStackTrace();• //to report the error, we will set run time error• throw new RuntimeException(e);• }• finally• {• try• {• //step 4:• con.close();• • }//try• catch(Exception e){}• }//finally• • • }//save • }//class

Page 66: 4 jdbc step1

• /* now we are writing Tese case for DAO object [that is save()] for this we have to use JUNIT but • we are using main() for this application• */ • //EmployeeDAOTestCase.java• import com.st.ems.dao.jdbc.EmployeeDAO;• import com.st.ems.dao.EmployeeDAOI;• • • public class EmployeeDAOTestCase• {• private EmployeeDAOI edao;• public void testsave()• {• edao.save(102,"e102",20000,20);• System.out.println("Details saved");• }• public static void main(String s[])• {• EmployeeDAOTestCase test=new EmployeeDAOTestCase();• test.edao=new EmployeeDAO();• test.testsave();//here Driver object is created• //test.testsave();//here 2nd Driver object is created but one Driver object is enought to handle • //multiple request from diffrent clients, connections as it is a Thread -safe• }• }

Page 67: 4 jdbc step1

• /*• D:\material\java(E DRIVE)\java\AdvJava\jdbc\DAO>javac -d .

*.java• D:\material\java(E DRIVE)\java\AdvJava\jdbc\DAO>D:\

material\java(E • DRIVE)\java\AdvJava\jdbc\DAO>set classpath=C:\oraclexe\

app\or• acle\product\10.2.0\server\jdbc\lib\ojdbc14.jar;.;• D:\material\java(E DRIVE)\java\AdvJava\jdbc\DAO>java

EmployeeDAOTestCase• Details saved• */

Page 68: 4 jdbc step1
Page 69: 4 jdbc step1

Q: is our DAO created efficient?

• Ans: No, we need to multiple changes. Let us look into all of them one after the other

• In the EmployeeDAO created earlier the save() method is programmed to create a new instance (object) of Driver class on every request, which is not effective.

• Considering the following points with respect to the Driver:• The Driver object is Thread-safe means Driver object performs

consistently even on concurrent requests from multiple threads• A single instance of Driver can be used to create multiple connections

because it is Thread-safe. If we create the multiple instances of Driver class, unnecessarly garbage is stored into the memory, and performance becomes slow.

• Considering these points a single instance of Driver is enough for an application per data base.

Page 70: 4 jdbc step1
Page 71: 4 jdbc step1
Page 72: 4 jdbc step1
Page 73: 4 jdbc step1
Page 74: 4 jdbc step1
Page 75: 4 jdbc step1
Page 76: 4 jdbc step1
Page 77: 4 jdbc step1
Page 78: 4 jdbc step1
Page 79: 4 jdbc step1