Методы класса 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:
По заданному названию корабля и году спуска на воду найдите класс, страну и все данные для этого корабля.
По заданному имени класса удалите из БД всю информацию о классе и всех кораблях этого класса из отношений Classes и Ships.
По заданному имени класса уменьшите водоизмещение на 1000 тонн.
По заданному имени класса, названия страны, имени корабля, его водоизмещения, числа и калибра орудий напечатайте пользователю всю информацию о корабле. Если такого корабля не существует, то введите информацию о корабле в два отношения Classes и Ships.
Рассмотрите проблему атомарности каждой транзакции и опишите проблемы, возникающие при сбое.
Рассмотрите проблему параллельности выполнения всех четырех транзакций.
Для базы данных компьютеров напишите и выполните отладку программ на языке Java, используя встроенный SQL:
По заданной скорости процессора и объему RAM найдите ПК и распечатайте номера моделей и цены.
По заданному номеру модели удалите кортеж для этой модели из отношений PC и Product.
По заданному номеру модели уменьшите цену ПК этой модели на 100$.
По заданному имени производителя, модели, скорости процессора, объему RAM, скорости CD и цене напечатайте пользователю информацию о ПК. Если такой модели не существует, то введите информацию о ней в два отношения PC и Product.
Рассмотрите проблему атомарности каждой транзакции и опишите проблемы, возникающие при сбое.
Рассмотрите проблему параллельности выполнения всех четырех транзакций.
Приложение 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 |