Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 14 Транзакции.doc
Скачиваний:
3
Добавлен:
13.11.2019
Размер:
283.65 Кб
Скачать

Методы класса Statement

ResultSet

executeQuery(String sql)

Возвращает единственную строку

int executeUpdate(String sql)

Возвращает количество измененных строк

boolean execute(String sql)

Возвращает множество строк

int getMaxFieldSize()

Возвращает максимальный размер поля

void setMaxFieldSize()

Устанавливает максимальный размер поля

int getMaxRows()

Возвращает максимальное число строк

void setMaxRows()

Устанавливает максимальное число строк

int getQueryTimeout()

Возвращает время выполнения запроса

void setQueryTimeout ()

Устанавливает время выполнения запроса

Метод executeQuery() возвращает объект класса ResultSet, в котором содержится результат запроса, представляющий собой множество. Результат запроса состоит из строк и столбцов одного или нескольких отношений. Чтобы извлечь значения отдельных строк из множества, следует использовать методы класса ResultSet, приведенные в табл.3.

Таблица 3

Методы класса ResultSet

byte getByte(int colIndex)

byte getByte(int colName)

byte[] getByte(int colIndex)

byte[] getByte(int colName)

date getDate(int colIndex)

date getDate(int colnName)

double getDouble(int colIndex)

double getDouble(int colName)

float getFloat(int colIndex)

float getFloat(int colName)

int getInt(int colIndex)

int getInt(int colName)

long getLong(int colIndex)

long getLong(int colName)

short getShort(int colIndex)

short getShort(int colName)

String getString(int colIndex)

String getString(int colName)

Time getTime(int colIndex)

Time getTime(int colName)

Методы позволяют получить значение атрибута в стандартном формате, извлекая его из множества ResultSet по индексу атрибута (colIndex) или по имени атрибута (colName).

Запрос к нескольким таблицам. Выполним запрос к нескольким таблицам базы данных кораблей. Например, определим названия, класс, год спуска на воду и исход сражений для кораблей, упомянутых в базе данных:

public static void main(java.lang.String[] args){

String name,clas,launched,result;

try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}catch(ClassNotFoundException e1){ System.out.println("ClassNotFoundException");};

try{Connection con=DriverManager.getConnection("jdbc:odbc:Ships","","");

Statement st=con.createStatement();

ResultSet res=st.executeQuery(

"SELECT Ships.name,Ships.clas,Ships.launched,

Outcomes.result "+

"FROM Ships,Outcomes "+

"WHERE Ships.name=Outcomes.ship");

while(res.next()){

name= res.getString(1);

clas= res.getString(2);

launched=res.getString(3);

result= res.getString(4);

System.out.println(name+"\t"+clas+

"\t"+launched+"\t"+result);}

}catch(SQLException e)

{System.out.println("SQLException”+e.getSQLState());}

В приведенном фрагменте программы обрабатываются исключения типа ClassNotFoundException, возникающее при неудачном соединении с базой данных, и SQLException, возникающее при наличии ошибок выполнения SQL запросов.

2. Порядок выполнения работы

Для базы данных кораблей напишите и выполните отладку программ на языке Java, используя встроенный SQL:

  1. По заданному названию корабля и году спуска на воду найдите класс, страну и все данные для этого корабля.

  2. По заданному имени класса удалите из БД всю информацию о классе и всех кораблях этого класса из отношений Classes и Ships.

  3. По заданному имени класса уменьшите водоизмещение на 1000 тонн.

  4. По заданному имени класса, названия страны, имени корабля, его водоизмещения, числа и калибра орудий напечатайте пользователю всю информацию о корабле. Если такого корабля не существует, то введите информацию о корабле в два отношения Classes и Ships.

  5. Рассмотрите проблему атомарности каждой транзакции и опишите проблемы, возникающие при сбое.

  6. Рассмотрите проблему параллельности выполнения всех четырех транзакций.

Для базы данных компьютеров напишите и выполните отладку программ на языке Java, используя встроенный SQL:

  1. По заданной скорости процессора и объему RAM найдите ПК и распечатайте номера моделей и цены.

  2. По заданному номеру модели удалите кортеж для этой модели из отношений PC и Product.

  3. По заданному номеру модели уменьшите цену ПК этой модели на 100$.

  4. По заданному имени производителя, модели, скорости процессора, объему RAM, скорости CD и цене напечатайте пользователю информацию о ПК. Если такой модели не существует, то введите информацию о ней в два отношения PC и Product.

  5. Рассмотрите проблему атомарности каждой транзакции и опишите проблемы, возникающие при сбое.

  6. Рассмотрите проблему параллельности выполнения всех четырех транзакций.

Приложение 1

База данных спектаклей

Performances

title

year

runningTime

type

theatre

composer

producerC#

Aida

1998

260

perform

Mariinsky

Diuseppe Verdy

123456

Don Carlos

1999

225

perform

La Scala

Diuseppe Verdy

234567

Don Pascuale

1997

125

concert

Mariinsky

Gaetano Donizetti

null

Macbeth

2001

180

perform

Mariinsky

Pyotr Tchaikovsky

456789

Swan lake

1950

175

perform

Mariinsky

Pyotr Tchaikovsky

567890

Giselle

1884

125

perform

Mariinsky

Adolphe Adam

789012

Salome

2000

90

perform

Mariinsky

Richard Strauss

890123

Carmen

1998

22

perform

Sarah Bernhart

George Bizet

901234

Apollo

1928

33

perform

Mariinsky

Igor Stravinsky

112345

Otello

1976

180

perform

La Scala

Diuseppe Verdy

223456

Romeo and Juliet

2001

180

perform

Covent Garden

Sergei Prokofiev

334567

Arabella

1997

180

perform

Covent Garden

Peter Mussbach

445678

ActsIn

perfTitle

theatreName

perfYear

actorName

Don Carlos

La Scala

1999

Olga Borodina

Carmen

La Canerenlola

1998

Olga Borodina

Aida

Mariinsky

1998

Olga Borodina

Aida

Mariinsky

1998

Irina Bogacheva

Rigoletto

Bolshoy Theatre

1980

Irina Bogacheva

Samson and Dalila

Mariinsky

2003

Irina Bogacheva

Carmen

Mariinsky

1998

Yury Marusin

La Traviata

Bolshoy Theatre

1980

Yury Marusin

Swan Lake

Mariinsky

1950

Ulyana Lopatkina

Giselle

Mariinsky

1884

Ulyana Lopatkina

Giselle

Mariinsky

1884

Farukh Ruzimatov

Apollo

Mariinsky

1928

Farukh Ruzimatov

Otello

La Scala

1976

Plassito Domingo

Otello

La Scala

1976

Frivotti Nuggi

Actors

name

address

ampoule

gender

bithdate

Olga Borodina

Saint Petersburg Garden st.10/10

Singer

F

1972-02-02

Irina Bogacheva

Saint Petersburg Nevsky st.15/15

Singer

F

1950-01-01

Yury Marusin

Saint Petersburg Grate Sea st.15/15

Singer

M

1945-05-05

Ulyana Lopatkina

Saint Petersburg Small Sea st.25/25

Principal dancer

F

1975-05-05

Farukh Ruzimatov

Saint Petersburg Nevsky st.150/15

Principal dancer

M

1973-03-03

Plassito Domingo

Milan

Singer

M

1966-06-06

Producers

name

address

cert#

networth

Alexei Stepaniuk

Saint Petersburg Garden st.10/10

123456

110000

Yury Alexandrov

Saint Petersburg Lime av.15/15

234567

210000

David McVicar

London Old st. 12/2

456789

1200000

Lev Ivanov

Saint Petersburg Palace quay 21

567890

400000

Jules Perrot

Paris Capuchin av.112

789012

550000

David Freeman

New York Fifth av.133

890123

630000

Rollan Petit

Paris Capuchin av.150

901234

920000

George Balanchine

Paris

012345

100000

Valery Gergiev

Saint Petersburg Theatre sq.1

001122

1000000

Karlo Fontana

Milan

223456

10000000

Kennet Macmillan

London Olg St 33

334567

20000000

Peter Mussbach

London Liverpool st 17

445678

22000000

Theatre

teatreName

artDirector

city

cert#

Mariinsky

Valery Gergiev

Saint Petersburg

001122

La Scala

Karlo Fontana

Milan

223456

Covent Garden

Russel Roberts

London

333444

Bolshoy Theatre

Valery Borisov

Moscow

444555

Grand Opera

Rudolf Nuriev

Paris

555666