1 COP 4710 Databases Fall, 2000 Today’s Topic Chapter 7: SQL David A. Gaitros October 9th, 2000...

Post on 17-Jan-2016

212 views 0 download

Transcript of 1 COP 4710 Databases Fall, 2000 Today’s Topic Chapter 7: SQL David A. Gaitros October 9th, 2000...

1

COP 4710 DatabasesFall, 2000

Today’s Topic

Chapter 7: SQL

David A. GaitrosOctober 9th, 2000Department of Computer Science

2

Modifying Content with SQL Insert queries

– insert into Customer values (555, 'Yu', 'Jia','540 Magnolia Hall','Tallahassee', 'FL', '32306')

– insert into Customer (firstName, lastName, accountId) values ('Jia', 'Yu', 555)

Update queries– update TimeCard set paid = true

where paid = false– update HourlyEmployee set hourlyRate =

hourlyRate *1.1 where ssn = '145-09-0967' Samples in Access

3

Creating Pay Statements with SQL Find the number of hours worked for each

employee entry– select TimeCard.ssn, sum((endTime-

startTime)*24) as hoursWorked from TimeCard where paid=false group by ssn

Create the Pay Statement entries for each Employee– select ssn, hourlyRate, hoursWorked,

hoursWorked * hourlyRate as amountPaid, today from …

Insert into the PayStatement table– Insert into PayStatement select …

Look at the Access example in BigHit.mdb

4

Defining queries for the PayStatement A view is a named query create view EmployeeHours as

– select TimeCard.ssn, sum((endTime-startTime)*24) as hoursWorked from TimeCard where paid=false group by ssn

create view EmployeePay as– select ssn, hourlyRate, hoursWorked,

hoursWorked * hourlyRate as amountPaid, today from EmployeeHours h, HourlyEmployee e where h.ssn=e.ssn

insert into PayStatement select * from EmployeePay

5

Marking TimeCards as paid update TimeCard set paid = true update TimeCard set paid=true where

paid=false updateTimeCard set paid=true where ssn in

(select ssn from EmployeePay) What happens if time cards added while pay

statements are being created?

6

Delete Statements Delete all time cards for non-hourly

employees– delete from Timecard where not exists

(select * from HourlyEmployee where TimeCard.ssn =

HourlyEmployee.ssn) More examples in BigHit Video Access

database

7

Create Table Statement create table Customer (

accountId int,lastName varchar(32),firstName varchar(32),street varchar(100),city varchar(32),state char(2),zipcode varchar(9)

) Note that SQL has specific types

8

Data types in SQLinteger integer, int, smallint,

longfloatingpoint

float, real, doubleprecision

Numeric types

formatted decimal(i,j), dec(i,j)fixedlength

char(n), character(n)Character-stringtypes

varyinglength

varchar(n), charvarying(n), charactervarying(n)

fixedlength

bit(n)Bit-string types

varyinglength

bit varying(n)

Date and timetypes

date, time, datetime,timestamp, time withtime zone, interval

character long varchar(n), clob,text

Large types

binary blob

9

Key Constraints in SQL Key declarations are part of create table

– create table Store (storeId int primary key,

– create table Movie (movieId varchar(10) primary key,

– create table Rental (accountId int, videoId varchar(10),primary key (accountId, videoId)

10

Referential Integrity Constraints A relationship is implemented by attributes

that reference the primary key of the related table– Enforcing referential integrity requires

guaranteeing that there is a referenced object– An attempt to modify the relationship (insert,

update or delete) is potential violation Declare foreign key constraints

– create table Store (manager int references Employee

– create table Rental (foreign key (accountId) references

Customer(accountId)

11

Maintaining Referential Integrity What happens when an update violates

referential integrity– update foreign key attribute

• change catalog id of a video– insert new object

• add a new video– delete related object

• delete catalog entry– update primary key attribute

• change catalog id of a video title Alternatives

– propagate changes– set to null

12

Constraints on Values of Attributes Not null constraints

– create table PreviousRental (accountId int not null references Customer,videoId int not null references Videotape,dateRented datetime not null,dateReturned datetime,cost real,primary key (accountId, videoId,

dateRented)) Check constraints

– check (checkOut < dueDate)– check (answer in (‘T’,’F’))– check (questionId in (select questionId from

questions where quizId=…))

13

Strategies for Enforcing Constraints Enforce always

– Never allow a violation of constraint– Suppose 2 rentals are recorded wrong

• change the customerId of 2 records– some violation will result

Enforce at end of transaction– Allow violations during updates, but check and

enforce at the end of the process Leads us to consider

– Chapter 14 Transactions in SQL– Allow cancellation of updates– Support concurrent access

14

COP 4710 DatabasesFall, 2000

Today’s Topic

Chapter 9: Java and Web Sites

David A. GaitrosDepartment of Computer Science

15

Java Objects and variables Objects are dynamically allocated

– Figures A.1 and A.2 show String variables• Assignment (=) and equality (==)

b. firstName="Jane"; String

Fred

String

Jane

firstName

a. firstName="Fred"; String

Fred

String

Jane

firstName

obj1

obj2

obj3

String

Jane

String

Jane

16

Differences from C++ C++ has three kinds of object variables

– ObjClass fixedObj, & refObj, * ptrObj– Java has only one– Hence, no dereferencing, no address calculation,

no pointer or reference types C++ methods, by default, are not virtual

– Java methods are virtual by default C++ virtual method hierarchies follow class

hierarchy– Java virtual methods can be based on interfaces

C++ has preprocessor, compiler and linker– Java has compiler and RTE

17

Browser-Web server-DB architecture Figure 8.2: Architecture of a Web site

supported by databases

WebBrowser

Web Server

Middlewarelayer

DatabaseServer

DatabaseServer

DatabaseServer layer

DatabaseServer

User and Application layer

WebBrowser

DatabaseApplication

DatabaseApplication

WebBrowser

WebBrowser

File System

18

Java DB Connectivity (JDBC)

Figure 8.4 Strategies for implementing JDBC packages

Intermediarycomputer

Databasecomputer

Local computer JavaProgram

java.sqlpackage

JDBC-ODBCbridge

ODBC databaseclient

Oracle Databaseclient

Middlewareclient

Middlewareserver

Oracleserver

Accessserver

Sybaseserver

Oracle Databaseclient

Sybase Databaseclient

Oracle ODBCclient

Access ODBCclient

JDBC package JDBC package JDBC package

19

Connecting to databases with Java java.sql.Driver

– no methods for users– DriverManager.Connect method create connection

java.sql.Connection– createStatement

java.sql.Statement– executeQuery returns table as ResultSet– executeUpdate returns integer update count

Examples in class

20

Details on JDBC Connections Loading driver classes

– Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

// Driver for JDBC-ODBC Bridge. Supports the bridge between the ODBC Microsoft Driver and the Java Database Driver.

– Class.forName(“oracle.thin.Driver”);

// This is the driver needed to connect directly to Oracle. – Class.forName(“jdbc:z1MySQL:”);

// This is the Driver to connect to a database using MySQL.

21

Database connection URL

–jdbc:<subprotocol>:<subname>

–protocol example

•jdbc:odbc:mydatabase

–subname example

•//hostname:port/databasename

•//enp01.enp.fsu.edu:3306/gsim

–CS Oracle URL

•jdbc:oracle:thin:@oracle.cs.fsu.edu:1521:cop4540

Details on JDBC Connections

22

Examples of JDBC Applications See SqlFilter.java See Web sites

– http://enp01.enp.fsu.edu See code in examples directory

23

Executing Insert and Update Statements Create new customer, using String +

int rowcount = stmt.executeUpdate(”insert into Customer ” +”(accountId,lastName,firstName)

” +”values

(1239,’Brown’,’Mary’)”);if (rowcount == 0) // insert failed

Update – String updateSQL = “update TimeCard set “ +”TimeCard.paid = 'yes’ where “ +”paid<>'yes’”;int count = stmt.execute(updateSQL);// count is number of rows affected

24

Executing unknown SQL Arbitrary SQL may return table (ResultSet) or

row count (int) Statement.execute method

stmt.execute(sqlStatement);

result = stmt.getResultSet();

while (true) {// loop through all results

if (result != null) // process result

else {// result is not a ResultSet

rowcount = stmt.getUpdateCount();

if (rowcount == -1) break // no more results

else // process row count

}

result = stmt.getMoreResults())

}