Класс Obslmp: реализация с помощью JDBC

В Java для реализации объявленного интерфейса в новом классе применяется конструкция implements. Поэтому при реализации интерфейса Observation воспользуемся ею в классе Obslmp. Когда мы создаем новый класс, реализующий интерфейс Java, первый должен реализовывать каждый метод второго. Интерфейсом Observation определяется лишь один метод, insertObs(), и его необходимо реализовать в классе Obslmp, для чего применим JDBC. В дальнейших статьях блога мы расширим и углубим знание об этом.

В классе Obslmp описывается и реализуется несколько частных (private) методов Java, т.е. тех, что не могут вызываться клиентами, и один общий (public), который клиенты могут вызывать:

  • Частный метод getNewObs() не может вызываться клиентами: он обращается к переопределяемому методу getNewObs (Connection conn), который, в свою очередь, генерирует новый идентификатор наблюдения. Данный метод возвращает вызывающему объект ObsHelper с идентификатором наблюдения.
  • Частный метод getNewObs (Connection conn) вызывает PL/SQL-функцию ObsActions.get0bsld(), генерирующую новый идентификатор наблюдения. При вызове методом getNewObsO он возвращает вызывающему объект ObsHelper. Полное описание PL/SQL-модуля ObsActions дано во введении.
  • Частный метод insertObs (ObsHelper obs) вызывает PL/SQL-метод ObsActions. insertObs ( . . . ) , который вводит OCEANIC_OBSERVATION_TYPE в таблицу OCEANIC_OBSERVATION_LIST. Он возвращает вызывающему объект ObsHelper.
  • Общий метод ArrayList insertObs (ArrayList inObs) — единственный, вызываемый клиентами. Напомним, что он и единственный, описанный в интерфейсе Observation. Метод принимает объект ArrayList из объектов ObsHelper в качестве входных данных и возвращает объект ArrayList из идентификаторов наблюдений. Для этого он последовательно вызывает метод insertObs (ObsHelper obs).
  • Частный статический (static) метод connectDb() подключается к базе данных и возвращает вызывающему объект java.sql. Connection.

Вот описание класса Obslmp:

 

// Имя программы: Obslmp.java
// Название: Название вашего продукта
// Версия:
// Авторское право: Copyright (с) 2000
// Автор: Ваше имя
// Описание: Класс реализации Java, реализующий
// вызываемый метод insertObsO клиента,
// заявленный в интерфейсе Observation.
package obsserver;
// импортируем helper-классы
import helpers.ObsHelper;
import helpers.ObsException;
// импортируем специфичное для приложения исключение
import java.sql.SQLException;
import java.sql.*;
import oracle.sql.*;
// Импортируем вспомогательные классы Java
import java.math.BigDecimal;
import java.util.ArrayList;
public class Obslmp implements Observation {
// Конструктор по умолчанию
public ObsImpO {
} // Конец конструктора
// Этот метод НЕ вызывается клиентами.
// Поэтому он не указан в интерфейсе
// Observation.
private ObsHelper getNewObs(Connection conn)
throws SQLException, ObsException {
// Создадим объект CallableStatement
CallableStatement cstmt = null;
try {
// Подготовим строку символов (String) для вызова
String sqlld = "{? = call OBSACTIONS.GETOBSID}";
} // Конец getNewObs(conn)
private ObsHelper insertObs(ObsHelper obs, Connection conn)
throws SQLException, ObsException {
// Создадим объект CallableStatement
CallableStatement cstmt = null;
try {
// Подготовим строку символов для вызова
// PL/SQL-процедуры OBSACTIONS.INSERTOBS()
String sql =
"{call OBSACTIONS.INSERTOBS(?,?,?,?,?,?,?,?,?,?,?)}";
cstmt = conn.prepareCall(sql);
// Установим входные параметры
// для PL/SQL-процедуры OBSACTIONS.INSERTOBS()
cstmt.setlnt(1, obs.obs_id.intValue());
cstmt.setString(2, obs.when_t);
cstmt.setString(3, obs.atjtime);
cstmt.setlnt(4, obs.produced_id.intValue());
cstmt.setlnt(5, obs.latitude.intValue());
cstmt.setlnt(6, obs.longitude. intValue());
cstmt.setlnt(7, obs.wdspd.intValue());
cstmt.setlnt(8, obs.adj_wdspd.intValue());
cstmt.setlnt(9, obs.wddir.intValue());
cstmt.setlnt(10, obs.pressure.intValue());
cstmt.setlnt(11, obs.station_id.intValue());
// Необходимо вызвать метод execute() объекта
// CallableStatement. Если забудем его включить, возникнут
// достаточно странные ошибки,
cstmt. execute();
// Возвратим объект ObsHelper
return new ObsHelper(obs.obs_id);
} // Конец try
catch (SQLException е) {
throw е;
} // Конец catch
// Выполним очистку
finally {
if ( cstmt != null ) cstmt.close();
} // Конец finallyO
} // Конец insertObs(obs,conn)
// Введем ArrayList из OCEANIC_OBSERVATION_TYPE
public ArrayList insertObs(ArrayList inObs)
throws SQLException, ObsException {
int loopVar = 0;
// Объявим массив объектов ObsHelper
ArrayList returnArrayList = inObs;
int arrayListSize = inObs.size();
Connection conn = null;
try {
// С помощью тонкого JDBC-драйвера Oracle
// подключимся к базе данных
conn = connectDb();
// Повторим действия и сохраним ArrayList
// идентификаторов obs_id в returnArrayList
while ( loopVar < arrayListSize ) {
// Получим новый obs_id на каждом шаге
ObsHelper anObsid = getNewObs(conn);
// Перенесем объект ObsHelper в obs
ObsHelper obs = (ObsHelper)inObs.get(loopVar);
// Заменим obs.obs_id новым anObsid.obs_id
obs.obs_id = anObsid.obs_id;
// Вызовем insertObs(..), добавив новую строку
// в базу данных, и возвратим новый
// ObsHelper с новым obs_id.
returnArrayList.add(insertObs ( obs, conn ));
loopVar++; // Увеличим счетчик
} // Конец while
// Уменьшим объект ArrayList до его текущего размера
returnArrayList.trimToSize();
// Возвратим ArrayList идентификаторов
return returnArrayList;
} // Конец try
catch (SQLExceptione) {
throw e;
} // Конец catch
// Выполним очистку
finally {
if ( conn != null ) conn.close();
} // Конец finallyO
} // Конец insertObs(ArrayList inObs)
// Этот метод вызывается всеми методами, которым нужно
// подключиться к базе данных с помощью тонкого
// JDBC-драйвера Oracle
private static Connection cormectDb().
throws SQLException {
// Создадим переменную java.sql.Connection
Connection conn = null;
DriverManager.registerDriver
(new oracle.jdbc.driver.OracleDriver());
\
// Подключимся к серверу базы данных data-i.com
conn = DriverManager. getConnect.i.on(
"jdbc:oracle:thin:@data-i.com:1521:ORCL",
"scott", "tiger");
// Возвратим объект java.sql.Connection
return conn;
} // Конец connectDb()
} // Конец класса Obslmp

Теперь, после построения компонента Observation, нужно скомпилировать исходные файлы Java. Обратите внимание на то, что для некоторых методов компонента в качестве входного параметра и возвращаемого типа использовался объект ArrayList. Тип ArrayList для Java описан в 1.2.x, поэтому для компиляции исходного программного текста следует пользоваться компилятором, соответствующим JDK 1.2.x. Если применять JDK 1.2.x нежелательно, замените тип ArrayList на любой массив Java или тип Vector. Для компиляции программ воспользуемся командой javac:

// Естественно, установим собственный CLASSPATH.
Javac -g helpers\*.java obsserver\*.java

Следите за тем, чтобы исходный программный текст для реализаций JDBC и SQLJ не присутствовал в одном каталоге. При компиляции программы SQLJ компилятор генерирует исходный файл . java. Если реализация JDBC находится в том же каталоге, она будет перезаписана. Во избежание подобной ситуации исходный текст всех программ, представленных в блоге, хранится в каталогах Jdbclmplementation и Sqljlmplementation.

Вас заинтересует / Intresting for you:

Инструментарий XML-разработчик...
Инструментарий XML-разработчик... 9469 просмотров Дэн Tue, 21 Nov 2017, 13:33:37
Path - пример создания пути в ...
Path - пример создания пути в ... 4490 просмотров Administrator SU Tue, 21 Nov 2017, 13:26:33
Path основа файлового ввода-вы...
Path основа файлового ввода-вы... 1726 просмотров Administrator SU Tue, 21 Nov 2017, 13:26:33
JAVA - компилятор или интерпре...
JAVA - компилятор или интерпре... 5355 просмотров Administrator SU Tue, 21 Nov 2017, 13:26:33
Войдите чтобы комментировать