Download JDBC Java Database Connectivity

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
JDBC
Java Database Connectivity
Outline of Presentation
 Introduction to JDBC
 JDBC Driver Types
 General Architecture
 JDBC Components





Database Programming using JDBC
java.sql.* Package
Accessing Database from a JSP Page
Deploying Java Beans in a JSP Page
Introduction To Struts Framework
Introduction to JDBC
 JDBC is a front end tool which is used to connect
front end java application to back end database
 JDBC is an alternative to ODBC and ADO that
provides database access to programs written in
Java.
 JDBC drivers are available for most DBMS
products
A JDBC Driver
 Is an interpreter that translates JDBC method calls to
vendor-specific database commands
Database
commands
JDBC calls
Driver
Database
 Implements interfaces in java.sql
 Can also provide a vendor’s extensions to the JDBC
standard
JDBC Driver Types
General Architecture
JDBC Components
Database Programming Using JDBC
STEPS:
 1.Load the Driver
 2.Establish a connection
 3.Create JDBC Statements
 4.Execute SQL Statements
 5.GET ResultSet
 6.Close connections
Using JDBC
1. Load the driver:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
//Type1 Driver
2. Establish a connection to the database:
 A connection URL string includes the literal jdbc:, followed by the
name of the driver and a URL to the database
String url = "jdbc:odbc:dsn”;
Create a Connection object:
Connection con = DriverManager.getConnection(url,
“scott”,”tiger”);
3. Create a statement object
Statement stmt = conn.createStatement();
Associate SQL with the statement object
String queryString = “select * from emp";
Using JDBC (Continued)
4.Execute the SQL Statements:
Example statements:
ResultSet
rs
=
stmt.executeQuery(querystring);
int
result =
stmt.executeUpdate(updatestring);

Compiled queries can be processed via a PreparedStatement object

Stored procedures can be processed via a CallableStatement object
5. GET Result
while (rs.next()) {
int empno = rs.getInt(1);
String empname = rs.getString(2);
}
6. Close connection
 stmt.close();
 con.close();
Using a PreparedStatement
// Once you have a connection, you can create a
// "prepared statement" object. A prepared statement is
// precompiled, and can be used repeatedly with new values
// for its parameters.
// Use question marks for parameter place-holders.
PreparedStatement prepStmt = con.prepareStatement(
"INSERT INTO Artist (ArtistID, Name, "
+ "Nationality, BirthDate, DeceasedDate)"
+ "VALUES (ArtistSeq.nextVal, ?, ?, ?, ? )" );
// Now supply values for the parameters
// Parameters are referenced in order starting with 1.
prepStmt.setString( 1, "Galvan" );
prepStmt.setString( 2, "French" );
prepStmt.setInt
( 3, 1910 );
prepStmt.setNull ( 4, Types.INTEGER );
// The PreparedStatement object methods:
// 1) executeUpdate -- statements that modify the database
// 2) executeQuery -- SELECT statements (reads)
prepStmt.executeUpdate();
System.out.println( "Prepared statement executed" );
// Now do it again
prepStmt.setString(
prepStmt.setString(
prepStmt.setInt
(
prepStmt.setInt
(
1,
2,
3,
4,
"Monet" );
"French" );
1840 );
1879 );
prepStmt.executeUpdate();
System.out.println( "Prepared statement executed again" );
Accessing a stored procedure
// Once you have a connection, you can create a
// "callable statement" object to access the stored procedure.
// Inside the curly braces, you call the procedure, and use
// question marks for parameter place-holders.
CallableStatement callStmt = con.prepareCall(
"{call Record_sale( ?, ?, ?, ?, ?, ?)}" );
// Now supply values for the parameters
// Parameters are referenced in order starting with 1.
callStmt.setString( 1, "Barry Goldwater" );
callStmt.setString( 2, "Tobey" );
callStmt.setString( 3, "Mystic Fabric" );
callStmt.setString( 4, "105/135" );
callStmt.setInt
( 5, 24000 );
// And register the OUT variable
// This variable returns information to this program
// from the stored procedure.
callStmt.registerOutParameter( 6, java.sql.Types.VARCHAR );
System.out.println( "Parameters set for CallableStatement" );
// The CallableStatement object has an additional method*
// for use when the stored procedure uses multiple SQL statements.
// 1) executeUpdate -- statements that modify the database
// 2) executeQuery -- SELECT statements (reads)
// *3) execute
-- procedures with multiple SQL statements
callStmt.execute();
System.out.println( "Stored procedure executed" );
// Get the OUT variable contents (parameter 6)
String result = callStmt.getString( 6 );
Java.sql.* package
java.sql.Connection
Statement createStatement (int resultSetType, int resultSetConcurrency)
PreparedStatement prepareStatement (String sql, int resultSetType, int
resultSetConcurrency)
CallableStatement prepareCall (String sql, int resultSetType, int resultSetConcurrency)
resultSetType
resultSetConcurrency
ResultSet.TYPE_FORWARD_ONLY
ResultSet.CONCUR_READ_ONLY
ResultSet.TYPE_SCROLL_INSENSITIVE
ResultSet.CONCUR_UPDATABLE
ResultSet.TYPE_SCROLL_SENSITIVE
Java.sql.* package
java.sql.ResultS
et
void beforeFirst() throws SQLException
void afterLast() throws SQLException
boolean first() throws SQLException
boolean last() throws SQLException
boolean absolute(int row) throws SQLException
boolean relative(int row) throws SQLException
Example : Backward
Statement stmt = conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT empno, sal FROM emp");
rs.afterLast();
while ( rs.previous() )
{
System.out.println(rs.getString("empno") + " " + rs.getFloat("sal"));
}
...
Accessing the Database using JSP
Consider stocks database
There are three tables. Both customer and stocks have a one-to-many
relationship with portfolios. The database stocks.mdb
was registered with the ODBC driver as “CoolStocks”
customer stocks portfolio
id
lname
fname
symbol id
company symbol
price
num_shares
Register w/ODBC
Create an ODBC data source.
Click on the Start button.
Choose Settings, Control Panel
Double-click on ODBC Data Sources
Choose the System DSN tab
Click Add
Click on the desired driver (Microsoft ODBC for oracle)
Click on the Finish button
Enter a Data Source Name (I called my database CoolStocks
and that name appears in the java code below)
A Simple JSP/JDBC Example
<TITLE>JSP JDBC Example 1</TITLE>
</HEAD>
<BODY>
<!– Adapted from James Goodwill’s Pure JSP 
<!-- Set the scripting language to java and -->
<!-- import the java.sql package -->
<%@ page language="java" import="java.sql.*" %>
<%@ page import= "java.io.*" %>
<%
Connection con = null;
try {
// Load the Driver class file
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Make a connection to the ODBC datasource Movie Catalog
con = DriverManager.getConnection("jdbc:odbc:CoolStocks“,”scott”,”tiger”);
// Create the statement
Statement statement = con.createStatement();
// Use the created statement to SELECT the DATA
// FROM the customer Table.
ResultSet rs = statement.executeQuery("SELECT * " +
"FROM customer");
// Iterate over the ResultSet
%>
<!-- Add an HTML table to format the results -->
<TABLE BORDER="1">
<TR>
<TH> Customer - ID</TH><TH>Last Name</TH>
<TH>First Name</TH>
<%
while ( rs.next() ) {
// get the id, convert to String
out.println("<TR>\n<TD>" + rs.getString("id") + "</TD>");
// get the last name
out.println("<TD>" + rs.getString("lname") + "</TD>");
// get the first name
out.println("<TD>" + rs.getString("fname") + "</TD>\n</TR");
}
// Close the ResultSet
rs.close();
}
catch (IOException ioe) {
out.println(ioe.getMessage());
}
catch (SQLException sqle) {
out.println(sqle.getMessage());
}
catch (ClassNotFoundException cnfe) {
out.println(cnfe.getMessage());
}
catch (Exception e) {
out.println(e.getMessage());
}
finally {
try {
if ( con != null ) {
// Close the connection no matter what
con.close();
}
}
catch (SQLException sqle) {
out.println(sqle.getMessage());
}
}
%>
</BODY>
</HTML>
It Works!(output)
Using JavaBeans in JSP
• To use a JavaBean in your JSP page, you need
to:
•Include the JavaBean reference in the JSP
page
•Set the JavaBean property
•Get the JavaBean property
Using JavaBeans in JSP (Contd.)
•
Including Bean Reference
•
•
•
•
You can use the JSP action tag, <jsp:useBean> to include a bean
reference in your JSP page.
The <jsp:useBean> action tag creates an instance of the JavaBean and
stores the bean reference in a variable.
The variable can then be used to access the JavaBean throughout the JSP
page.
The following code snippet shows the syntax of the <jsp:useBean> action
tag:
<jsp:useBean
id=”Bean Name”
scope=”ScopeName”
class=”class name />
Using JavaBeans in JSP (Contd.)
•
Scope of JavaBean in a JSP page
• page: Specifies that the JavaBean object is available only
for the current page. The following code snippet shows
the <jsp:useBean> action tag that includes a bean with a
page scope:
<jsp:useBean id="option_bean" scope =”page”
class="test.OptionBean"/>
• request: Specifies that the JavaBean object is available
for the current request. The following code snippet shows
the <jsp:useBean> action tag that includes a bean with a
request scope:
<jsp:useBean id="option_bean" scope =”request”
class="test.OptionBean"/>
Using JavaBeans in JSP (Contd.)
• session: Specifies that the JavaBean object is available only for
the current session. The following code snippet shows the
<jsp:useBean> action tag that includes a bean with a session
scope:
<jsp:useBean id="option_bean" scope =”session”
class="test.OptionBean"/>
• application: Specifies that the JavaBean object is available for the
entire Web application. The following code snippet shows the
<jsp:useBean> action tag that includes a bean with an
application scope:
<jsp:useBean id="option_bean" scope =”application”
class="test.OptionBean" />
Using JavaBeans in JSP (Contd.)
•
Setting Beans Properties
•
•
•
The <jsp:setProperty> tag enables you to set properties for
a JavaBean to specific values.
The <jsp:setProperty> tag can be defined inside
<jsp:useBean> tag or anywhere in the JSP file after the
declaration of <jsp:useBean> tag.
The following syntax shows how to set a property of a
JavaBean using <jsp:setProperty> tag:
<jsp:setProperty name=”beanName” property=”
propertyName“>
Using JavaBeans in JSP (Contd.)
•
The following table describes various attributes of the <jsp:setProperty>
tag:
Attribute
Description
name
Specifies the name of the bean object. The value of this
attribute should be the same as the value of the id attribute
of the <jsp:useBean> tag.
property
Represents the name of JavaBean property to be set.
Using JavaBeans in JSP (Contd.)
•
Reading Bean Properties
•
•
•
The <jsp:getProperty> action tag is used to read the value of a
JavaBean property in your JSP page.
The value returned by the tag, <jsp:getProperty> is converted into
java.lang.String and is placed into an implicit object, out.
The following syntax shows how to get the JavaBean property using
the <jsp:getProperty> tag:
<jsp:getProperty name=”beanName“ property=”propertyName” />
Using JavaBeans in JSP (Contd.)
•
The following table describes various attributes of the <jsp:getProperty>
tag:
Attribute
Description
name
Represents the name of the JavaBean object.
property
Represents the bean property for which you want to retrieve the
value.
Demonstration-Implementing
JavaBeans in JSP
•
Problem Statement
•
Create a JSP application that connects to a database and retrieve
the details, such as author id, address, city, state, and zip code
related to authors. The JavaBean component should accept the
author id, driver name, and URL as a parameter. The information is
to be retrieved from author’s table.
Demonstration-Implementing
JavaBeans in JSP (Contd.)
•
Solution
•
To solve the given problem, perform the following task:
1.
2.
3.
4.
Create a JavaBean that implements the business logic.
Create a JSP page that instantiates a JavaBean.
Create the user interface using HTML.
Access the JSP application.
Struts Frame work
Struts is an open-source framework for building more flexible,
maintainable
and structured front-ends in Java web applications
 There are two key components in a web application:
the data and business logic performed on this data
the presentation of data
 Struts
helps structuring these components in a Java web app.
controls the flow of the web application, strictly separating
these components
unifies the interaction between them
 This separation between presentation, business logic and control is
achieved
by implementing the Model-View-Controller (MVC)
Design Pattern
The Model-View-Controller Pattern - Overview
 Splits up responsibilities for handling user interactions in an application into
three layers:
Model, View, Controller
 Model
 holds application data and business logic
 is absolutely independent from the UIs
The Model-View-Controller Pattern - Details
 View
 presentation of parts of the Model to the user
 independent from the internal implementation of the Model
 there can be different Views presenting the same Model data
 Controller
 “bridge” between Model and View
 controls the flow of the application



receives/interprets user input
performs operations on the Model
triggers View update
 Benefits:
 better maintainability and testability of applications
 ability to easily develop different kinds of UIs (e.g. console, GUI, …)
 separation of different tasks in development
 code reusability
Controller ► ActionServlet
 The central component in a Struts application
 manages the flow of the application
 receives user requests and delegates
them
to the corresponding Action classes
 selects the appropriate View to be displayed next
(according to ActionForward returned by an Action class)
 represents a Single Point of Entry of the web application
(Front Controller Pattern)
 implemented as a simple Java Servlet
 listed in the deployment descriptor of the surrounding Web
Container (usually web.xml) for handling *.do requests
 can be extended, but in most cases this is not necessary
Controller ► Actions
 perform logic depending on a user’s request
 Actions
 are Java classes that extend Struts’ Action
class org.apache.struts.action.Action
 The Action's execute() method is called by
the ActionServlet
 Tasks are usually performed by Actions:
 depending on the type of action:
perform the action directly (non-complex actions)
 call one or more business logic methods in the Model
 return an appropriate ActionForward object that tells the
ActionServlet which View component it should forward to
 Ex.: “failure” or “success” in login application

Controller ► ActionForms
 represent the data stored in HTML forms
 hold the state of a form in their properties
 provide getter/setter methods to access them
 may provide a method to validate form data
 ActionForms
 are Java classes that extend Struts’ ActionForm
class org.apache.struts.action.ActionForm
 are filled with the form data by the ActionServlet
 one ActionForm can be used for more than one HTML form
 very useful when building wizards or similar types of forms
Controller ► ActionForms ► Validating user input
 Validation is done
 right in the beginning before the data is used by any business
methods (at this point, validation is limited to the data structure!)
 Struts offers two options for server-side validation of user input:
 the validate() method in ActionForms
 can
be implemented by the ActionForm developer
 returns either null (no errors) or an ActionErrors object
 a plug-in to use the Jakarta Commons Validator within Struts
 based on rules defined in an XML file
 there can be one or more rules associated with each property in
a form
 rules can define required fields, min./max. length, range, type
 error messages and rules can be localized using resource
bundles
View ► JSPs with Struts tag libraries
 The presentation layer in a Struts
application is created using standard JSPs
together with some Struts Tag Libraries
 Struts tag libraries
 provide access to Model data
 enable interaction with ActionForms
 provide simple structural logic (such as iteration)
Example:

...
<%@ prefix="html" uri="/WEB-INF/struts-html.tld" %>
<body>
<html:errors/>
<html:form action="login.do">
Username: <html:text property="username"/><br/>
Password: <html:password property="passwd"
redisplay="false"/><br/>
<html:submit>Login</html:submit>
</html:form>
</body>
The Model
 Holds the data of an application and provides
business logic methods
 Not directly part of the Struts framework!
 The Model is usually built of different kinds
of Business Objects:
 JavaBeans
 simple
Java classes, that follow certain naming conventions
 contain attributes and corresponding getters/setters
 reside in the Web Container
 Enterprise JavaBeans (EJBs)
 components containing business logic in a J2EE architecture
 reside in an EJB Container
 kinds of EJBs: Session Beans, Entity Beans, Message Driven
Beans
Important Questions
1. Explain Different Types of JDBC Drivers
2. Explain the process of Accessing Database from a
JSP Page
3. Explain Struts Framework
4. Explain Deploying of Java Beans in a JSP Page
5. Explain Java.sql.* package
6. Explain Various types of ResultSets with example