Document

advertisement
Chapter 15
Creating More Complex
Database Applications
Chapter 15 - Creating More Complex Database
Applications
1
15
One to One Relationships
 There is a one-to-one relationship between
Customer and Boat
 A customer always owns exactly one boat
and a boat always belongs to just one
customer
 Use a database to implement the one-toone association using a relational database
Chapter 15 - Creating More Complex Database
Applications
2
15
Understanding Tables in
CustomerAndBoatDatabase
1. Create Chapter15Example1 folder
2. Locate CustomerAndBoatDatabase.mdb on the CD
3. Open CustomerAndBoatDatabase using Microsoft
Access
4. View the contents of the BoatTable

The primary key of BoatTable is StateRegistrationNo
5. View the contents of the CustomerTable

The primary key of CustomerTable is PhoneNo
Chapter 15 - Creating More Complex Database
Applications
3
Understanding Tables in
CustomerAndBoatDatabase
Chapter 15 - Creating More Complex Database
Applications
15
4
Understanding Tables in
CustomerAndBoatDatabase
Chapter 15 - Creating More Complex Database
Applications
15
5
15
Understanding Tables in
CustomerAndBoatDatabase
Chapter 15 - Creating More Complex Database
Applications
6
Understanding Tables in
CustomerAndBoatDatabase
Chapter 15 - Creating More Complex Database
Applications
7
Understanding Tables in
CustomerAndBoatDatabase
Chapter 15 - Creating More Complex Database
Applications
15
8
15
Using SQL to Join Table in Database
 The SQL statement to find and display the
state registration number and manufacturer
of all boats in BoatTable together with the
name and phone number of each boats
owner:
SELECT StateRegistration, Manufacturer, CustomerName, PhoneNo
FROM BoatTable, CustomerTable
WHERE CustomerPhoneNo = PhoneNo;
Chapter 15 - Creating More Complex Database
Applications
9
15
Using SQL to Join Table in Database
 The SQL statement displays the state
registration number, name, and address of
the owner of the boat with state registration
number MO98765:
SELECT StateRegistration, Manufacturer, CustomerName, PhoneNo
FROM BoatTable, CustomerTable
WHERE CustomerPhoneNo = PhoneNo
AND StateRegistrationNo = ‘MO98765’;
Chapter 15 - Creating More Complex Database
Applications
10
Establishing a Common Connection
 Need a new class named
CustomerAndBoatDatabaseConnect
 It is responsibility of this class is to manage
the connection to the database
 The initialize method establishes a
connection of the database
Chapter 15 - Creating More Complex Database
Applications
11
Modifying the Customer PD
 Include a boat reference attribute
 Initialize boat reference to null in constructor
 Include setter and getter methods to set and
retrieve boat reference
 Use the common database connection
established by
CustomerAndBoatDatabaseConnect
Chapter 15 - Creating More Complex Database
Applications
12
15
The BoatDA Class
 Adds find, add, delete, and update methods
 Defines a boat reference variable and a
Vector of boat reference variables
Chapter 15 - Creating More Complex Database
Applications
13
15
The BoatDA Class – Initialize and Terminate
 Initialize uses the database connection
established by
CustomerAndBoatDatabaseConnect to
create a Statement
 Terminate closes the Statement instance
Chapter 15 - Creating More Complex Database
Applications
14
15
The BoatDA Class – find and getAll Methods
 The find method defines a SELECT
statement that retrieves a particular record
from BoatTable
 Find throws a NotFoundException if the
record is not found
 The getAll method returns a Vector of boat
references
Chapter 15 - Creating More Complex Database
Applications
15
The BoatDA Class – addNew Method
 Similar to the addNew method of the Customer
class
 Extracts boat attributes from the boat instance
received
 Create a SQL INSERT statement
 Before executing INSERT need to confirm that the
database does not already contain a duplicate –
using the find method
 If a duplicate is found a DuplicateException is
thrown
Chapter 15 - Creating More Complex Database
Applications
16
The BoatDA Class – update and delete
Methods
 The update and delete methods extract attributes
from the boat instance received in the argument
list, then define the appropriate SQL statements
 Before executing UPDATE and DELETE need to
confirm that the database already contains the
record – using the find method
 If a record is not found a NotFoundException is
thrown
Chapter 15 - Creating More Complex Database
Applications
17
15
Modifying the Boat Class to Work with BoatDA
 Can extend the functionality of the Boat PD to use
the BoatDA class
 The Boat class needs four static methods:




Initialize
Find
getAll
Terminate
 Three instance methods:
 addNew
 Update
 delete
Chapter 15 - Creating More Complex Database
Applications
18
15
Modifying the CustomerDA Class
 Change the CustomerDA class to support
joining information from the BoatTable and
CustomerTable
 Now includes a reference to a Boat object
Chapter 15 - Creating More Complex Database
Applications
19
CustomerDA Class – find and getAll Methods
 Change the SQL statement WHERE clause
to specify both the join condition and the
primary key for the customer of interest
Chapter 15 - Creating More Complex Database
Applications
20
CustomerDA Class – find and getAll Methods
Chapter 15 - Creating More Complex Database
Applications
21
CustomerDA Class – addNew Method
 The is a mandatory one-to-one relationship
between Customer and Boat
 Must be a customer record for every boat record –
the addNew method must enforce this requirement
 After inserting a customer record into
CustomerTable, a record must be inserted into the
BoatTable
 Preserves the integrity of the database
Chapter 15 - Creating More Complex Database
Applications
22
15
CustomerDA Class – delete and update
Methods
 The delete method must also preserve the
integrity of the database
 When a customer record is deleted, the
corresponding boat record must be deleted
as well
 The update method is unchanged
Chapter 15 - Creating More Complex Database
Applications
23
Testing the CustomerAndBoatDatabase
Application
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
15
Declare necessary reference variables
Invoke the initialization method
Attempt to retrieve customer and boat information for customer
whose phone number is 123-4567
Use the printDetails method to display the results
Try to retrieve a record that doesn’t exist
Call the getAll method
Create a new Customer and Boat instance
Call the addNew method
Verify records have been added
Test the delete method
Test the update method
Call the terminate method
Chapter 15 - Creating More Complex Database
Applications
24
Implementing a One-To-Many
Relationship
15
 The relationship between Dock and Slip is a
one-to-many relationship
 A dock contains many slips
 A slip belongs to one dock
Chapter 15 - Creating More Complex Database
Applications
25
Understanding the Tables in
DockAndSlipDatabase
1.
2.
3.
4.
Create a Chapter15Example2 folder
Copy the DockAndSlipDatabase from the CD
Open the database in Microsoft Access
View the DockTable

DockID is the primary key
5. View the SlipTable


SlipNo and DockID form the concatenated primary key
DockID is a foreign key for DockTable
Chapter 15 - Creating More Complex Database
Applications
26
Understanding the Tables in
DockAndSlipDatabase
Chapter 15 - Creating More Complex Database
Applications
27
Understanding the Tables in
DockAndSlipDatabase
Chapter 15 - Creating More Complex Database
Applications
28
Common Connection to
DockAndSlipDatabase
15
 Need a separate DA class to establish a
connection
 Same as CustomerAndBoatDatabaseConnect
class except:
 Different data source is used
Chapter 15 - Creating More Complex Database
Applications
29
15
Modifying the Dock and Slip Classes
 Dock class must be modified to support
object persistence in a relational database
 Implement the initialize, terminate, find, and
getAll methods
 Implement a tellAboutSelf method
 Don’t need to modify the Slip class nor
create a SlipDA class -- WHY?
 See Figure 15-25 on pp. 557-558
Chapter 15 - Creating More Complex Database
Applications
30
15
Introducing the DockDA Class
 Similar to other DA classes, except it does
not require insert, update, or delete methods
 Methods used to terminate and initialize are
similar to other DA classes
 See pp. 559-563
Chapter 15 - Creating More Complex Database
Applications
31
DockDA Class – find Method
 Needs SQL statement to extract dock and slip
information from the database
 WHERE clause specifies both the join condition
and the primary key for the dock of interest
 ORDER BY clause specifies the information
returned by the query is sorted by slip number
Chapter 15 - Creating More Complex Database
Applications
32
DockDA Class – find Method
Chapter 15 - Creating More Complex Database
Applications
15
33
DockDA Class – getAll Method
 Similar to find method
 Returns dock and slip information for all slips in
the marina, sorted by dock and then slip
 Dock information is repeated for each slip
 Creates only one dock instance however
 Control-break logic is used to manage this
 See Figure 15-26 on pp. 563
Chapter 15 - Creating More Complex Database
Applications
34
DockDA Class – getAll Method
Chapter 15 - Creating More Complex Database
Applications
15
35
Testing the DockAndSlipDatabase Application
1. Define necessary variable and establish the
connection to the database
2. Attempt to find Dock 1
3. printDetails method displays information about
the dock and slips
4. Attempt to find Dock 2 and slips
5. Invoke the getAll method
Chapter 15 - Creating More Complex Database
Applications
36
Testing the DockAndSlipDatabase Application
Chapter 15 - Creating More Complex Database
Applications
37
Implementing an Association Class
 The Lease class has associated
AnnualLease and DailyLease subclasses
 Implement the Lease association class in a
relational database application
Chapter 15 - Creating More Complex Database
Applications
38
Understanding Tables in
CustomerLeaseSlipDatabase
15
 Create a Chapter15Example3 folder
 Open the CustomerLeaseSlipDatabase
 View the CustomerTable, LeaseTable, and
SlipTable
 Customer phone number is primary key for
LeaseTable
 Slip number and dock ID are foreign keys in
LeaseTable
Chapter 15 - Creating More Complex Database
Applications
39
Understanding Tables in
CustomerLeaseSlipDatabase
Chapter 15 - Creating More Complex Database
Applications
40
Understanding Tables in
CustomerLeaseSlipDatabase
Chapter 15 - Creating More Complex Database
Applications
15
41
15
Modifying the Customer Class
 Need to associate a customer instance with
a lease instance
 Need to add a lease reference to the
CustomerPD class
 Include getter and setter methods for the
lease reference
 See Figure 15-31 on pp. 569-570
Chapter 15 - Creating More Complex Database
Applications
42
15
Modifying the Lease and AnnualLease
Class
 Must associate the lease with a customer’s
slip
 Need to add a slip reference and customer
reference
 Include getter and setter references to
manage these references
 See Figures 15-32 and 15-33
Chapter 15 - Creating More Complex Database
Applications
43
15
Modifying the Slip Class
 Must associate a slip with its corresponding lease
and customer
 Need to add an annual lease reference to the
attribute list and set its value to null
 Three DA methods are needed:
 Initialize
 Terminate
 Find – requires two parameters – slip number and dock
ID
Chapter 15 - Creating More Complex Database
Applications
44
15
The SlipDA Class
 You must find a particular slip so it can be leased
to a customer
 Need a SlipDA class
 Initialize and Terminate methods are identical to
other DA classes
 Find method defines a SELECT statement that
returns information from the SlipTable for a
particular slip
Chapter 15 - Creating More Complex Database
Applications
45
The AnnualLeaseDA Class
 Must find and insert information about
annual leases in the database
 Define variables for annual lease attributes
 Uses standard initialize and terminate
methods
Chapter 15 - Creating More Complex Database
Applications
46
AnnualLeaseDA Class - find
 Query retrieves information from three tables:
CustomerTable, LeaseTable, and SlipTable
 The WHERE clauses uses the relationships
between these tables to create the join conditions
 The setCustomer method establishes a link with
the annual lease instance
Chapter 15 - Creating More Complex Database
Applications
47
AnnualLeaseDA Class - addNew
 Receives a reference to the annual lease
instance that will be added
 Lease amount, balance, payment, and start
date are extracted
 Before executing SQL statement that inserts
into LeaseTable – checks to see if primary
key already exists in the database
Chapter 15 - Creating More Complex Database
Applications
48
Testing CustomerLeaseSlipDatabase
Application
1.
2.
3.
4.
5.
6.
7.
Declare instances of AnnualLease, Customer, and Slip
Add a new record to LeaseTable
Locate customer 123-4567
Find Slip 1 on Dock 1
Create a new annual lease instance
Retrieve newly added information
Close the database connection
Chapter 15 - Creating More Complex Database
Applications
49
Testing CustomerLeaseSlipDatabase Application
Chapter 15 - Creating More Complex Database
Applications
15
50
Download