Spec-Zone .ru
спецификации, руководства, описания, API
След: JDBC (ТМ) Доступ к базе данных
Урок: Основы JDBC
Используя Объекты JoinRowSet
Домашняя страница > JDBC (ТМ) Доступ к базе данных > Основы JDBC

Используя Объекты JoinRowSet

A JoinRowSet реализация позволяет Вам создавать SQL JOIN между RowSet объекты, когда они не соединяются с источником данных. Это важно, потому что это сохраняет издержки необходимости создать одно или более соединений.

Следующие темы затрагиваются:

JoinRowSet интерфейс является подынтерфейсом CachedRowSet взаимодействуйте через интерфейс и таким образом наследовал возможности a CachedRowSet объект. Это означает это a JoinRowSet объект является разъединенным RowSet возразите и может работать, всегда не будучи соединенным с источником данных.

Создание Объектов JoinRowSet

A JoinRowSet объект служит держателем SQL JOIN. Следующая строка шоу кода, чтобы создать a JoinRowSet объект:

JoinRowSet jrs = new JoinRowSetImpl();

Переменная jrs ничего не содержит до RowSet объекты добавляются к этому.

Отметьте: Альтернативно, можно использовать конструктора от JoinRowSet реализация Вашего драйвера JDBC. Однако, реализации RowSet интерфейс будет отличаться от ссылочной реализации. У этих реализаций будут различные имена и конструкторы. Например, Oracle реализация драйвера JDBC JoinRowSet интерфейс называют oracle.jdbc.rowset.OracleJoinRowSet.

Добавление Объектов RowSet

Любой RowSet объект может быть добавлен к a JoinRowSet возразите, пока это может быть часть SQL JOIN. A JdbcRowSet объект, который всегда соединяется с его источником данных, может быть добавлен, но обычно он является частью a JOIN работая с источником данных непосредственно вместо того, чтобы стать частью a JOIN будучи добавленным к a JoinRowSet объект. Точка обеспечения a JoinRowSet реализация должна позволить разъединенному RowSet объекты стать частью a JOIN отношение.

Владелец цепочки Перерыва на кофе кофеен хочет получить список кофе, которые он покупает у Acme, Inc. Чтобы сделать это, владелец должен будет получить информацию от двух таблиц, COFFEES и SUPPLIERS. В мире базы данных прежде RowSet технология, программисты отправили бы следующий запрос базе данных:

String query =
    "SELECT COFFEES.COF_NAME " +
    "FROM COFFEES, SUPPLIERS " +
    "WHERE SUPPLIERS.SUP_NAME = Acme.Inc. " +
    "and " +
    "SUPPLIERS.SUP_ID = COFFEES.SUP_ID";

В мире RowSet технология, можно выполнить тот же самый результат, не имея необходимость отправлять запрос источнику данных. Можно добавить RowSet объекты, содержащие данные в этих двух таблицах к a JoinRowSet объект. Затем, потому что все подходящие данные находятся в JoinRowSet объект, можно выполнить запрос на этом, чтобы получить требуемые данные.

Следующий фрагмент кода от JoinSample.testJoinRowSet создает два CachedRowSet объекты, coffees заполненный с данными от таблицы COFFEES, и suppliers заполненный с данными от таблицы SUPPLIERS. coffees и suppliers объекты должны сделать соединение с базой данных, чтобы выполнить их команды и быть заполненными с данными, но после того, как это делается, они не должны повторно соединиться снова, чтобы сформировать a JOIN.

coffees = new CachedRowSetImpl();
coffees.setCommand("SELECT * FROM COFFEES");
coffees.setUsername(settings.userName);
coffees.setPassword(settings.password);
coffees.setUrl(settings.urlString);
coffees.execute();

suppliers = new CachedRowSetImpl();
suppliers.setCommand("SELECT * FROM SUPPLIERS");
suppliers.setUsername(settings.userName);
suppliers.setPassword(settings.password);
suppliers.setUrl(settings.urlString);
suppliers.execute(); 

Управление Столбцами Соответствия

Взгляд на SUPPLIERS таблица, можно видеть, что у Acme, Inc. есть идентификационный номер 101. Кофе в таблице COFFEES с идентификационным номером поставщика 101 являются колумбийскими и Colombian_Decaf. Присоединение информации от обеих таблиц возможно, потому что у этих двух таблиц есть столбец SUP_ID in common. В JDBC RowSet технология, SUP_ID, столбец тот, на который JOIN базируется, вызывается столбцом соответствия.

Каждый RowSet объект, добавленный к a JoinRowSet у объекта должны быть столбец соответствия, столбец на который JOIN базируется. Есть два способа установить столбец соответствия для a RowSet объект. Первый путь состоит в том, чтобы передать столбец соответствия к JoinRowSet метод addRowSet, как показано в следующей строке кода:

jrs.addRowSet(coffees, 2);

Эта строка кода добавляет coffees CachedRowSet к jrs объект и наборы второй столбец coffees (SUP_ID) как столбец соответствия. Строка кода, возможно, также использовала имя столбца скорее что номер столбца.

jrs.addRowSet(coffees, "SUP_ID");

В этой точке, jrs имеет только coffees в этом. Следующее RowSet объект, добавленный к jrs должен будет быть в состоянии сформировать a JOIN с coffees, который является истиной suppliers потому что у обеих таблиц есть столбец SUP_ID. Следующая строка кода добавляет suppliers к jrs и устанавливает столбец SUP_ID как столбец соответствия.

jrs.addRowSet(suppliers, 1);

Теперь jrs содержит a JOIN между coffees и suppliers от которого владелец может получить имена кофе, предоставленных Acme, Inc. Поскольку код не устанавливал тип JOIN, jrs содержит внутреннее объединение, которое является значением по умолчанию. Другими словами, строка в jrs комбинирует строку в coffees и строка в suppliers. Это сдерживает столбцы coffees плюс столбцы в suppliers для того, строк, в который значение в COFFEES.SUP_ID столбец соответствует значение в SUPPLIERS.SUP_ID. Следующий код распечатывает имена кофе, предоставленных Acme, Inc., где String supplierName равно Acme, Inc. Отметьте, что это возможно потому что столбец SUP_NAME, который является от suppliers, и COF_NAME, который является от coffees, теперь оба включаются в JoinRowSet объект jrs.

System.out.println("Coffees bought from " + supplierName + ": ");

while (jrs.next()) {
    if (jrs.getString("SUP_NAME").equals(supplierName)) {
        String coffeeName = jrs.getString(1);
        System.out.println("     " + coffeeName);
    }
}

Это произведет вывод, подобный следующему:

Coffees bought from Acme, Inc.:
     Colombian
     Colombian_Decaf

JoinRowSet интерфейс обеспечивает константы для того, чтобы они установили тип JOIN это будет сформировано, но в настоящий момент единственный тип, который реализуется, JoinRowSet.INNER_JOIN.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя CachedRowSetObjects
Следующая страница: Используя Объекты FilteredRowSet