Глава 6 jdbc (java database connectivity)

Тема 6.1 Драйверы, соединения и запросы

JDBC (JavaDataBaseConnectivity) – обычный прикладной интерфейс (API) языка Java для организации сотрудничества между приложением и СУБД. Это сотрудничество осуществляется посредством драйверов не, снабжающих реализацию неспециализированных интерфейсов для конкретных СУБД и конкретных протоколов.

JDBC предоставляет интерфейс для разработчиков, применяющих разные СУБД. Посредством JDBC отсылаются SQL-запросы лишь к реляционным базам данных (БД), для которых существуют драйверы, опытные метод общения с настоящим сервером базы данных.

Строго говоря, JDBC не имеет прямого отношения к J2EE, но так как сотрудничество с СУБД есть неотъемлемым элементом Web-приложений, то эта разработка рассматривается в данном контексте.

Последовательность действий:

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

К примеру:

String driverName = com.mysql.jdbc.Driver;

дляСУБД MySQL,

String driverName = sun.jdbc.odbc.JdbcOdbcDriver;

дляСУБД MSAccess либо

String driverName = org.postgreesql.Driver;

для СУБД PostgreeSQL.

Затем выполняется фактически загрузка драйвера в память:

Class.forName(driverName);

и делается вероятным соединение с СУБД.

Эти же действия возможно выполнить, импортируя библиотеку и создавая объект очевидно.

2. Установка соединения с БД.

Для установки соединения с БД вызывается статический способ
getConnection() классаDriverManager. В качестве параметров способу передаются URL базы данных, логин пользователя БД и пароль доступа. Способ возвращает объект Connection. URL базы данных, складывающийся из адреса и типа физического размещения БД, может создаваться в виде отдельной строки либо извлекаться из файла ресурсов.

Connection cn = DriverManager.getConnection(jdbc:mysql://localhost/my_db, root, pass);

В следствии будет возвращен объект Connection и будет одно установленное соединение с БД my_db. Класс DriverManager предоставляет средства для управления комплектом драйверов баз данных. Посредством способа
registerDriver() драйверы регистрируются, а способом getDrivers() возможно взять перечень всех драйверов.

3.Создание объекта для передачи запросов.

По окончании создания объекта Connection и установки соединения возможно затевать работу с БД посредством операторов SQL. Для исполнения запросов используется объект Statement, создаваемый вызовом способа createStatement() класса Connection.

Statement st = cn.createStatement();

Объект класса Statement употребляется для исполнения SQL-запроса без его предварительной подготовки. Смогут использоваться кроме этого объекты класса PreparedStatement для исполнения подготовленных запросов. Созданные объекты возможно применять для исполнения запроса SQL, передавая его в один из способов executeQuery(String sql) либо executeUpdate(String sql).

4. Исполнение запроса.

Результаты исполнения запроса помещаются в объект ResultSet:

ResultSet rs = st.executeQuery(SELECT * FROM my_table);

Для добавления, удаления либо трансформации информации в таблице вместо способа executeQuery()запрос помещается в способ executeUpdate().

5.Обработка результатов исполнения запроса производится способами интерфейса ResultSet, где самыми распространенными являются next() и
getString(int pos) и подобные способы, начинающиеся с getТип(int pos) (getInt (int pos),getFloat(int pos) и др.) и updateТип(). Действенным методом извлечения значения поля из таблицы ответа есть обращение к этому полю по его позиции в строчке.

При первом вызове способа next() указатель перемещается на таблицу результатов выборки в позицию первой строки таблицы ответа. В то время, когда строчки закончатся, способ возвратит значение false.

6.Закрытие соединения

cn.close();

По окончании того как база больше не нужна, соединение закрывается.

Чтобы верно пользоваться приведенными способами, программисту требуется знать типы полей БД. В распределенных совокупностях это знание предполагается изначально.

СУБД MySQL совместима cJDBC и будет использоваться для экспериментальных БД. Последняя версия CУБД возможно загружена с сайта www.mysql.com. Для корректной установки нужно следовать инструкциям мастера установки. Каталог лучше выбирать по умолчанию. В ходе установки направляться создать администратора СУБД с именем root и паролем pass. В случае, если планируется разворачивать реально трудящееся приложение, нужно исключить тривиальных пользователей сервера БД (в противном случае преступники смогут взять полный доступ к БД).

Дополнительно требуется подключить библиотеку, содержащую драйвер MySQL

Mysql-connector-java-3.1.12.jar

Тема 6.2 Простое простой запрос и соединение

Сейчас направляться воспользоваться всеми прошлыми руководствами и создать простое соединение с БД.

Листинг 6.1

import java.sql.*;

public class Main {

public static void main(String[] args) {

Connection cn = null;

Statement st = null;

try {

Class.forName(com.mysql.jdbc.Driver);

try {

cn = DriverManager.getConnection( jdbc:mysql://localhost/my_db, root, );

try {

st = cn.createStatement();

st.executeUpdate(CREATE TABLE user(id INT(3) PRIMARY KEY, name VARCHAR(20) ));

st.executeUpdate(INSERT INTO userVALUES (1,’user1′));

st.close();

} catch (SQLException ex) {

System.out.println(Error in Statement + ex);

}

cn.close();

} catch (SQLException ex) {

System.out.println(Error in create Connection + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println(Error in download Driver + ex);

}

}

}

В следствии исполнения данной программы в базе данныхmy_db(должна быть создана на сервере заблаговременно) будет создана таблица test и в нее внесены эти. В данном примере употребляется положенная совокупность блоков try-catch, что разрешает остановить исполнение, когда случилась какая-то неточность. При громадного количества запросов это не весьма комфортно. В листинге 6.2 приведен класс разрешающий более удачно трудиться с БД.

Листинг 6.2

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

public DB (String path, String nameDB, String login, String pass) {

try {

Class.forName(com.mysql.jdbc.Driver);

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println(Error in Statement + ex);

}

} catch (SQLException ex) {

System.out.println(Error in create Connection + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println(Error in download Driver + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (SQLException ex) {

System.out.println(Error in update + ex);

}

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println(Error in close + ex);

}

}

}

public class Main {

public static void main(String[] args) {

DB db = new DB(jdbc:mysql://localhost/, my_db, root, );

db.update(CREATE TABLE user(id INT(3) PRIMARY KEY, name VARCHAR(20) ));

db.update(INSERT INTO userVALUES (1,’user1′));

db.update(INSERT INTO userVALUES (2,’user2′));

db.update(INSERT INTO userVALUES (3,’user3′));

db.close();

}

}

В следствии исполнения данной программы будет создана такая же таблица как и в листинге 6.1 и в нее занесены эти.

Тема 6.2 Класс ResultSet

Данный класс воображает результирующий комплект базы данных. Он снабжает приложению построчный доступ к итогам запросов в базе данных. На протяжении обработки запроса ResultSet поддерживает указатель на текущую обрабатываемую строчок. Приложение последовательно перемещается по итогам, пока они не будут все обработаны либо не будет закрыт ResultSet.

Основныеметоды:

public boolean absolute(int row) throws SQLException

Способ перемещает курсор на заданное число строчков от начала, в случае, если число положительно, и от финиша — в случае, если отрицательно.

public void afterLast() throws SQLException

Данный способ перемещает курсор в финиш результирующего комплекта за последнюю строчок.

public void beforeFirst() throws SQLException

Данный способ перемещает курсор в начало результирующего комплекта перед первой строчком.

public void deleteRow() throws SQLException

Удаляет текущую строчок из базы и результирующего набора данных.

public ResultSetMetaData getMetaData() throws SQLException

Предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит данные о результирующие таблице, такую как количество столбцов, их заголовок и т.д.

public int getRow() throws SQLException
Возвращаетномертекущейстроки.

public Statement getStatement() throws SQLException

Возвращаетэкземпляр Statement, которыйпроизвелданныйрезультирующийнабор.

public boolean next() throws SQLException
public boolean previous() throws SQLException

Эти способы разрешают переместиться в результирующем комплекте на одну строчок вперед либо назад. Во снова созданном результирующем комплекте курсор устанавливается перед первой строчком, исходя из этого первое обращение к способу next() влечет позиционирование на первую строчок. Эти способы возвращают true, в случае, если остается строчок для предстоящего перемещения. В случае, если строчков для обработки больше нет, возвращается false. В случае, если открыт поток InputStream для прошлой строчка, он закрывается. Кроме этого очищается цепочка предупреждений SQLWarning.

public void close() throws SQLException

Осуществляет немедленное закрытие ResultSet вручную. В большинстве случаев этого не нужно, поскольку закрытие Statement, связанного с ResultSet, машинально закрывает ResultSet. К сожалению, не все разработчики JDBC-драйверов придерживаются этих конвенций, к примеру, драйвер Oracle самостоятельно не закрывает ResultSet’ы, так что настоятельно рекомендую закрывать вручную.

Листинг 6.3

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

private ResultSet rs;

public DB(String path, String nameDB, String login, String pass) {

try {

Class.forName(com.mysql.jdbc.Driver);

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println(Error in Statement + ex);

}

} catch (SQLException ex) {

System.out.println(Error in create Connection + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println(Error in download Driver + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (SQLException ex) {

System.out.println(Error in update + ex);

}

}

public ResultSet query(String sql) {

try {

rs = st.executeQuery(sql);

} catch (SQLException ex) {

System.out.println(Error in query + ex);

}

return rs;

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println(Error in close + ex);

}

}

}

import java.sql.*;

public class Main {

public static void main(String[] args) {

DB db = new DB(jdbc:mysql://localhost/, my_db, root, );

ResultSet rs = db.query(SELECT * FROM user);

try {

while (rs.next()) {

System.out.println(ib = + rs.getInt(1) + \tname = + rs.getString(2));

}

} catch (SQLException ex) {

System.out.println(Error in rs + ex);

}

db.close();

}

}

В следствии исполнения данной программы возьмём:

ib = 1 name = user1

ib = 2 name = user2

ib = 3 name = user3

Тема 6.3 Метаданные

СуществуетцелыйрядметодовинтерфейсовResultSetMetaData
иDatabaseMetaDataдляинтроспекцииобъектов. Посредством этих способов возможно взять перечень таблиц, выяснить типы, свойства и количество столбцов БД. Для строчков аналогичных способов нет.

Взять объект ResultSetMetaData возможно следующим образом:

ResultSetMetaDatarsMetaData = rs.getMetaData();

Кое-какие способы интерфейса ResultSetMetaData:

intgetColumnCount() – возвращает число столбцов комплекта результатов объекта ResultSet;

StringgetColumnName(intcolumn) – возвращает имя указанного столбца объекта ResultSet;

intgetColumnType(intcolumn) – возвращает тип данных указанного столбца объекта ResultSet и т.д.

Взять объект DatabaseMetaData возможно следующим образом:

DatabaseMetaDatadbMetaData = cn.getMetaData();

Кое-какие способы очень широкого интерфейса DatabaseMetaData:

StringgetDatabaseProductName() – возвращает наименование СУБД;

StringgetDatabaseProductVersion() – возвращает номер версии СУБД;

StringgetDriverName() – возвращает имя драйвера JDBC;

StringgetUserName() – возвращает имя пользователя БД;

StringgetURL() – возвращает местонахождение источника данных;

ResultSetgetTables() – возвращает комплект типов таблиц, дешёвых для данной БД, и т.д.

Добавим в класс DB способ showDatabaseMetaData() демонстрирующий работу некоторых способов из класса DatabaseMetaData и способ showResultSet() выводящий все сведенья из объекта класса ResultSet.

Листинг 6.4

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

private ResultSet rs;

public DB(String path, String nameDB, String login, String pass) {

try {

Class.forName(com.mysql.jdbc.Driver);

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println(Error in Statement + ex);

}

} catch (SQLException ex) {

System.out.println(Error in create Connection + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println(Error in download Driver + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (на данный момент ex) {

System.out.println(Error in update + ex);

}

}

public ResultSet query(String sql) {

try {

rs = st.executeQuery(sql);

} catch (SQLException ex) {

System.out.println(Error in query + ex);

}

return rs;

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println(Error in close + ex);

}

}

public void showDatabaseMetaData() {

try {

//получаемметаданные

DatabaseMetaData dbmd = cn.getMetaData();

//выводиминформациюпроБД

System.out.println(dbmd.getDatabaseProductName());

System.out.println(dbmd.getDatabaseProductVersion());

System.out.println(dbmd.getDriverName());

System.out.println(dbmd.getDriverVersion());

} catch (SQLException ex) {

System.out.println(Error in showDatabaseMetaData + ex);

}

}

public void showResultSet(ResultSet rs) {

try {

//получаемметаданные

ResultSetMetaData rsmd = rs.getMetaData();

//выводимназваниястолбцов

for (int i = 1; i

System.out.print(rsmd.getColumnName(i) + \t);

}

// выводим строки

while (rs.какое количество()) {

System.out.println();

for (int i = 1; i

System.out.print(rs.getString(i) + \t);

}

}

} catch (SQLException ex) {

System.out.println(Error in showResultSet + ex);

}

}

}

public class Main {

public static void main(String[] args) {

DB db = new DB(jdbc:mysql://localhost/, my_db, root, );

db.showDatabaseMetaData();

db.showResultSet(db.query(SELECT * FROM user));

db.close();

}

}

В следствии работы данной программы взяли:

MySQL

5.1.53-community

MySQL-AB JDBC Driver

mysql-connector-java-5.1.18

id name

1 user1

2 user2

3 user3

Тема 6.4 Подготовленные запросы

Для представления запросов существуют еще объекты PreparedStatement. Объекты этого класса употребляются при исполнении довольно часто повторяющихся запросов SQL. Таковой оператор предварительно подготавливается и хранится в объекте, что активизирует обмен информацией с БД.

Одно из ответственных особенностей способа prepareStatement – возможность обработки входных параметров. Они помечаются в операторе SQL знаком ? на месте фактического значения. В программе Java проводится соответствие между методами и параметрами setXXXX()– setInt, setFloat, setString и т.д., в соответствии с типами входных параметров. Все способы setXXXX() принимают в качестве параметров указатель и значение параметра parameterIndex, что равен 1 для первого ?, 2 – для второго и т.д. Исполнение sql-оператора обеспечивается способами объекта PreparedStatement:

  • executeQuery()– для исполнения запроса выборки SELECT ;
  • executeUpdate()– для исполнения запроса модификации данных INSERT, UPDATE либо DELETE.

Объект PreparedStatement снабжает более стремительное исполнение оператора SQL. Оценить преимущества во времени возможно, сделав много повторяемых запросов с предварительной подготовкой запроса и без нее.

PreparedStatement ps = null;

String sql = INSERT INTO user (id, name) VALUES(?,?);

//компиляция (подготовка) запроса

ps = (PreparedStatement) cn.prepareStatement(sql);

ps.setInt(1, id);

ps.setString(2, name);

//исполнение подготовленного запроса

ps.executeUpdate();

В таблице любая строчок содержит информацию об одном объекте и, перед тем как создавать таблицу, комфортно создать класс-сущность, имя которого будет совпадать с заглавием таблицы, а поля – с заглавиями столбцов.

В листинге 6.5 приведен пример применения подготовленного класса и запроса сущности.

Листинг 6.5

public class User {

private int id;

private String name;

public User() {

}

public User(int id, String name) {

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return super.toString(); //To change body of generated methods, choose Tools | Templates.

}

}

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

private ResultSet rs;

public DB(String path, String nameDB, String login, String pass) {

try {

Class.forName(com.mysql.jdbc.Driver);

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println(Error in Statement + ex);

}

} catch (SQLException ex) {

System.out.println(Error in create Connection + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println(Error in download Driver + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (SQLException ex) {

System.out.println(Error in update + ex);

}

}

public ResultSet query(String sql) {

try {

rs = st.executeQuery(sql);

} catch (SQLException ex) {

System.out.println(Error in семь дней + ex);

}

return rs;

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println(Error in close + ex);

}

}

public void showDatabaseMetaData() {

try {

//приобретаем метаданные

DatabaseMetaData dbmd = cn.getMetaData();

//выводим данные про БД

System.out.println(dbmd.getDatabaseProductName());

System.out.println(dbmd.getDatabaseProductVersion());

System.out.println(dbmd.getDriverName());

System.out.println(dbmd.getDriverVersion());

} catch (SQLException ex) {

System.out.println(Error in showDatabaseMetaData + ex);

}

}

public void showResultSet(ResultSet rs) {

try {

//приобретаем метаданные

ResultSetMetaData rsmd = rs.getMetaData();

//выводим заглавия столбцов

for (int i = 1; i

System.out.print(rsmd.getColumnName(i) + \t);

}

// выводим строки

while (rs.next()) {

System.out.println();

for (int i = 1; i

System.out.print(rs.getString(i) + \t);

}

}

System.out.println();

} catch (SQLException ex) {

System.out.println(Error in showResultSet + ex);

}

}

public void addUser(User user) {

try {

PreparedStatement ps = null;

String sql = INSERT INTO + user.getClass().getSimpleName() + (id, name) VALUES(?,?);

//компиляция (подготовка) запроса

ps = (PreparedStatement) cn.prepareStatement(sql);

ps.setInt(1, user.getId());

ps.setString(2, user.getName());

//исполнение подготовленного запроса

ps.executeUpdate();

} catch (SQLException ex) {

System.out.println(Error in addUser + ex);

}

}

public void changeNameUser(User user) {

try {

PreparedStatement ps = null;

String sql = UPDATE + user.getClass().getSimpleName() + SET name=? WHERE id= + user.getId();

ps = (PreparedStatement) cn.prepareStatement(sql);

ps.setString(1, user.getName());

ps.executeUpdate();

} catch (SQLException ex) {

System.out.println(Error in changeNameUser + ex);

}

}

public void deleteUser(User user) {

String sql = DELETE FROM + user.getClass().getSimpleName() + WHERE id= + user.getId();

update(sql);

}

}

public class Main {

public static void main(String[] args) {

DB db = new DB(jdbc:mysql://localhost/, my_db, root, );

System.out.println(Вывод текущего состояния таблицы);

db.showResultSet(db.query(SELECT * FROM user));

db.addUser(new User(4, user4));

db.addUser(new User(5, user5));

db.addUser(new User(6, user6));

System.out.println(Вывод таблицы по окончании добавления нескольких объектов);

db.showResultSet(db.query(SELECT * FROM user));

db.changeNameUser(new User(6, new_user6));

User mas[] = {new User(7, user7), new User(8, user8), new User(9, user9)};

for (int i = 0; i mas.length; i++) {

db.addUser(mas[i]);

}

System.out.println(Вывод таблицы по окончании добавления массива объектов);

db.showResultSet(db.query(SELECT * FROM user));

for (int i = 0; i mas.length; i++) {

db.deleteUser(mas[i]);

}

System.out.println(Вывод таблицы по окончании удаления массива объектов);

db.showResultSet(db.query(SELECT * FROM user));

db.close();

}

}

В следствии исполнения данной программы возьмём:

Вывод текущего состояния таблицы

id name

1 user1

2 user2

3 user3

Вывод таблицы по окончании добавления нескольких объектов

id name

1 user1

2 user2

3 user3

4 user4

5 user5

6 user6

Вывод таблицы по окончании добавления массива объектов

id name

1 user1

2 user2

3 user3

4 user4

5 user5

6 new_user6

7 user7

8 user8

9 user9

Выводтаблицыпослеудалениямассиваобъектов

id name

1 user1

2 user2

3 user3

4 user4

5 user5

6 new_user6

Выводы к главе:

  • JDBC (JavaDataBaseConnectivity) – обычный прикладной интерфейс (API) языка Java для организации сотрудничества между приложением и СУБД.
  • При работе с БД нужно:

1). Загрузить драйвер в память

2). Создать соединение с БД

3). Создать объект для передачи запросов

4). Послать запрос в базу данных

5). Обработать итог работы запроса

6). Закрыть соединение с БД

  • ResultSet воображает результирующий комплект базы данных. Он снабжает приложению построчный доступ к итогам запросов в базе данных.
  • Метаданные разрешают взять разные эти про базу данных и про выборку.
  • Объект PreparedStatement снабжает более стремительное исполнение оператора SQL и имеет возможность обработки входных параметров. Употребляется для довольно часто передаваемых запросов.
  • Перед тем как создавать таблицу, комфортно создать класс-сущность, имя которого будет совпадать с заглавием таблицы, а поля – с заглавиями столбцов.

Задания к главе:

1). Производство

Минимальный перечень черт:

  • Код изделия, наименование изделия, есть ли типовым, примечание — для каких целей предназначено, годовой количество выпуска;
  • код, наименование, телефон и адрес фирм, производящих изделия;
  • наименование, тип, единица измерения материала, цена за единицу, отметка об применении материала в данном изделии;
  • количество материала в спецификации изделия, дата установления спецификации, дата отмены;
  • объём выпуска и год выпуска данного изделия предприятием.

Одно изделие может содержать довольно много типов материалов и одинаковый материал может входить в состав различных изделий.

Выборки:

  • Выяснить изделие, в которое входит больше всего материалов типа ‘цветной металл’.
  • Вывести перечень изделий, каковые не производились в 2000 г.
  • Вывести перечень изделий, для которых затраты на материалы в 2000 г. снизились если сравнивать с прошлым годом.
  • Вывести среднемесячный расход материала ‘лапша’ в 2000 г.

2). Торговая сеть

Минимальный перечень черт:

  • Номер, ФИО, адрес, телефон обладателя магазина, размер вклада в магазин, номер регистрации;
  • номер, наименование, телефон и адрес магазина, уставной капитал, профиль;
  • номер, ФИО, адрес, телефон поставщика, и цена поставки данного поставщика в этот магазин.

Одинаковый магазин может иметь пара обладателей и одинаковый обладатель может иметь в собственности довольно много магазинов.

Примечание: профиль — продуктовый, галантерейный, канцелярский и т.п.

Выборки:

  • Выяснить самого молодого предпринимателя, обладающего собственностью в районе ‘Киевский’.
  • Выяснить случаи, в то время, когда регистрировалось владение лицами, не достигшими 18 лет.
  • Выяснить случаи, в то время, когда больше 50% уставного капитала магазина внесено предпринимателем, живущим в другом районе.
  • Вывести перечень профилей магазинов, которыми обладает предприниматель ‘Кузнецов’ в порядке убывания положенного в них капитала.

3). Телефонная станция

Минимальный перечень черт:

  • Номер абонента, фамилия абонента, адрес, наличие блокиратора, примечание;
  • Код АТС, код района, количество номеров;
  • Номер спаренного телефона абонента, задолженность.

Один спаренный номер одной АТС может употребляться несколькими абонентами и одинаковый клиент может применять телефоны различных АТС.

Выборки:

  • Выбрать пары сблокированных телефонов.
  • Выяснить АТС, районы действия которых перекрываются.
  • Выбрать телефоны группового пользования, Вывести их фамилии и номера абонентов.
  • Выбрать перечень абонентов АТС 47, имеющих задолженность больше 100 руб.

4). Муниципальный транспорт

Минимальный перечень черт:

  • Вид транспорта, средняя скорость перемещения, количество автомобилей в парке, цена проезда;
  • номер маршрута, количество остановок в пути, количество автомобилей на маршруте, количество пассажиров в сутки;
  • начальный пункт пути, конечный пункт, расстояние.

Одинаковый вид транспорта может на различных маршрутах применять различные дороги следования.

Выборки:

  • Выяснить оптимальный по времени маршрут между пунктами ‘Холодная Гора’ и ‘Парк ‘.
  • Выяснить среднее время ожидания на остановке троллейбуса №39.
  • Вывести маршруты трамваев в порядке убывания их протяженности.
  • Вывести перечень ежедневных финансовых поступлений для всех видов транспорта.

5). Шахматы

Минимальный перечень черт:

  • Фамилия спортсмена, дата рождения, страна, спортивный разряд, принимал участие ли в борьбе за титул мирового чемпиона, рейтинг, примечание
  • Турнир, страна, город, дата проведения, уровень турнира;
  • Стартовый номер спортсмена в данном турнире, занятое место.

Один шахматист может принимать участие в различных турнирах.

Выборки:

  • Выбрать турнир с самым высоким рейтингом участников.
  • Выбрать те турниры, где все призовые места заняли представители страны-хозяина турнира.
  • Выяснить турниры, в которых участник с самым высоким рейтингом занял последнее место.

Java JDBC Tutorial — Part 1: Connect to MySQL database with Java


Понравилась статья? Поделиться с друзьями: