Spec-Zone .ru
спецификации, руководства, описания, API
|
A JoinRowSet
реализация позволяет Вам создавать SQL JOIN
между RowSet
объекты, когда они не соединяются с источником данных. Это важно, потому что это сохраняет издержки необходимости создать одно или более соединений.
Следующие темы затрагиваются:
JoinRowSet
интерфейс является подынтерфейсом CachedRowSet
взаимодействуйте через интерфейс и таким образом наследовал возможности a CachedRowSet
объект. Это означает это a JoinRowSet
объект является разъединенным RowSet
возразите и может работать, всегда не будучи соединенным с источником данных.
A JoinRowSet
объект служит держателем SQL JOIN
. Следующая строка шоу кода, чтобы создать a JoinRowSet
объект:
JoinRowSet jrs = new JoinRowSetImpl();
Переменная jrs
ничего не содержит до RowSet
объекты добавляются к этому.
Отметьте: Альтернативно, можно использовать конструктора от JoinRowSet
реализация Вашего драйвера JDBC. Однако, реализации RowSet
интерфейс будет отличаться от ссылочной реализации. У этих реализаций будут различные имена и конструкторы. Например, Oracle реализация драйвера JDBC JoinRowSet
интерфейс называют oracle.jdbc.rowset.OracleJoinRowSet
.
Любой 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
.