Upload
bertha-hamilton
View
231
Download
1
Embed Size (px)
Citation preview
Chapter 8Databases
Objectives
• Explain the structure of a relational database
• Use SQL for creating, maintaining, and accessing relational databases
• Use Java/JDBC for accessing relational databases
• Explain and apply basic principles of good database design
RDBMS
• A Relational Database Management System (RDBMS) provides data storage and access for web applications
Relation
• relation is a mathematical term that refers to an ordered set of values drawn from different domainsEx: a relation on numbers x letters x symbols
(55, A, #)
Database Structure
• A database includes one or more tables– Each table represents one type of entity
• Example: Tables in a Library Database
Patron
Book
Loan(transaction)
Recording
Database Structure
• Each table field represents an entity attribute• Each table row represents one entity
Year Make Model Color
1973 Volkswagen Jetta Red
1992 Ford Aerostar Blue
2004 Chevrolet Suburban Black
Car table:
field
row
Structured Query Language
• SQL is a standard language for creating and maintaining relational databases
• SQL statement types:– data definition: create databases and tables– data manipulation: add, modify, delete data– data control: set access permissions
Basic SQL Statements
• Data definition– CREATE, DROP
• Data manipulation– SELECT, INSERT, UPDATE, DELETE
• Data control– GRANT, REVOKE
CREATE
• Create a database or a table
CREATE DATABASE ehsl
CREATE ehsl.player (playerNr int PRIMARY KEY,name VARCHAR(30),isCurrent BOOLEAN NOT NULL)
Basic SQL Data Types
• INTEGER• DECIMAL(T, R)
– T=total digits, R=right digits (after '.')• FLOAT
• CHAR(N) N characters• VARCHAR(N) up to N characters
• BOOLEAN
• DATE• TIME
DROP
• DROP can be used to delete an entire database or a table
DROP ehsl
DROP ehsl.player
SELECT
• SELECT retrieves data from a database
SELECT field-list FROM database.table
WHERE condition
ORDER BY field-list
– field-list is a comma-separated list of fields from the named table (* means "all fields")
– condition is a Boolean condition using field names and/or constants
SELECT
• Example
SELECT * FROM ehsl.player
SELECT playerNr, name FROM ehsl.player
WHERE isCurrent=TRUE
SELECT playerNr, name, status FROM ehsl.player
WHERE playerNr >= 90001
ORDER BY status, name
INSERT
• INSERT adds a new row to a table
INSERT INTO ehsl.player VALUES (23752, 'Jane Doe', TRUE)
UPDATE
• UPDATE changes one or more rows
UPDATE database.tableSET field-assignment-listWHERE condition
UPDATE ehsl.player
SET isCurrent=TRUEWHERE playerNr=33256
DELETE
• DELETE removes one or more rows from a table
DELETE FROM database.tableWHERE condition
DELETE FROM ehsl.playerWHERE playerNr=33523
Warning
• UPDATE and DELETE without a WHERE clause will affect all rows!
UPDATE ehsl.playerSET isCurrent=true
DELETE FROM ehsl.player
Change all rows!
Delete all rows!
GRANT
• GRANT can be used to give access permissions to users
GRANT ALL PRIVILEGES ON database.tableTO user-name
– user-name is formatted as user@host, for example 'jonesac'@'localhost'
REVOKE
• REVOKE can be used to eliminate access permissions
REVOKE ALL PRIVILEGES on database.tableFROM user-name
REVOKE ALL PRIVILEGES on ehsl.playerFROM 'jonesac'@'localhost'
Create User
• The CREATE command can also be used to create new users
CREATE USER user-nameIDENTIFIED BY password
CREATE USER 'jonesac'@'localhost'IDENTIFIEC BY 'abc123#'
JDBC
• Java Database Connectivity (JDBC) is a Java API that allows Java programs to interact with relational database management systems
• Interaction also requires a database driver, which translates JDBC commands to procedure calls on the RDBMS
RDBMS
Driver
JDBC
ApplicationProgram
JDBC – Load Driver
• The first step is to load the database driver– Usually provided by the RDBMS vendor
String driverClassName = "com.mysql.jdbc.Driver";
try {
Class.forName(driverClassName);
}
catch (ClassNotFoundException cnfe) {
….
}
JDBC – Execute Query (1/2)
• To execute an SQL Query:
String query = "...";Vector<String> colNames = new Vector<String>, result = new Vector<String>;try { Connection con = DriverManager.getConnection( dbUrl, dbUserId, dbPassword); Statement st = con.createStatement(); ResultSet rs = st.executeQuery(query); ResultSetMetaData md = rs.getMetaData();
JDBC – Execute Query (2/2)
• To execute an SQL Query:// get column namesfor (int i = 1; i <= md.getColumnCount(); i++) { colNames.addColumnName(md.getColumnName(i));}// get field valueswhile (rs.next()) { for (int i = 1; i<=md.getColumnCount(); i++) { result.addFieldValue(rs.getString(i)); }}con.close();} catch (SQLException s) { ...}
access the next row of the table
access the next field of the row
JDBC – Execute Command
• To execute an SQL command:
int result = 0;String command = "...";try { con = DriverManager.getConnection( dbUrl, dbUserId, dbPassword); stmt = con.createStatement(); result = stmt.executeUpdate(command); con.close();} catch (SQLException s) { ...} result = number of rows affected
(inserted, modified, or deleted)
JDBC Design
• An effective design for database access:– JSP: user interface presentation– Java Servlet: application logic– Java Bean: database access
(JDBC)
JSPcreate user interface
Java Servletprocess / prepare
data
Java Beanaccess RDBMS
using JDBC
RDBMS
dependency
Database Design Principles
1. Each field should contain a single value
2. Repeated fields with empty values should be made a separate table
3. Each table should represent only one entity
Example: Registration
• WRONG:
• Better:
multiple valued field
empty fields
Example: Registration
• Better still:
multiple entities:class registration /class name
Example: Registration
• RIGHT:
Review
• Relational Database / RDBMS• SQL
– Data Definition– Data Manipulation– Data Control
• JDBC– Database Driver– Query Execution– Command Execution
• Database Design Principles