Примеры запроса и модификации базы данных с использованием JDBC
Сопряжение JDBC - ODBC
В качестве составной части JDBC поставляется драйвер для доступа из JDBC к источникам данных ODBC (Open Database Connectivity), и называется "программа сопряжения JDBC - ODBC". Эта программа сопряжения реализована в виде JdbcOdbc.class и является библиотекой для доступа к драйверу ODBC.
Поскольку JDBC конструктивно близок к ODBC, программа сопряжения является несложной надстройкой над JDBC. На внутреннем уровне этот драйвер отображает методы Java в вызовы ODBC и тем самым взаимодействует с любым ODBC - драйвером. Достоинство такой программы сопряжения состоит в том, что JDBC имеет доступ к любым базам данных, поскольку ODBC - драйверы распространены очень широко.
В соответствии с правилами Internet JDBC идентифицирует базу данных при помощи URL, который имеет форму:
jdbc:<субпротокол>:<имя, связанное с СУБД или Протоколом>
У баз данных в Internet/intranet "имя" может содержать сетевой URL
//<имя хоста>:<порт>/..
<субпротокол> может быть любым именем, которое понимает база данных. Имя субпротокола "odbc" зарезервированно для источников данных формата ODBC. Типичный JDBC URL для базы данных ODBC выглядит следующим образом:
jdbc:odbc:<DNS - имя ODBC>;User=<имя пользователя>; PW=<пароль>
Внутреннее устройство JDBC - приложения
Рис.20. Иерархия классов JDBC и поток API JDBC
Чтобы обработать информацию из базы данных, информационно-обучающая система на языке Java выполняет ряд шагов. На рис.20 показаны основные объекты JDBC, методы и последовательность выполнения, Во-первых, программа вызывает метод getConnection (), чтобы получить объектConnection.Затем она создает объект Statement и подготавливает оператор SQL.
Оператор SQL может быть выполнен немедленно (объект Statement), а может быть откомпилирован (объект PreparedStatement) или представлен в виде вызова процедуры (объект CallableStatement). Когда выполняется метод executeQuery(), возвращается объект ResultSet. Операторы SQL, такие как updatе или delete не возвращают ResultSet. Для таких операторов используется метод executeUpdate(). Он возвращает целое, указывающее количество рядов, затронутых оператором SQL.
ResultSet содержит ряды данных и анализируетcя методом next(). Если приложение обрабатывает транзакции, можно пользоваться методами rollback() и commit() для отмены или подтверждения изменений, внесенных оператором
SQL.
Данный пример иллюстрирует как при помощи SQL - опрератора SELECT составляется список всех студентов из базы данных. Ниже приводятся шаги, которые необходимы для выполнения этого задания при помощи API JDBC. Каждый шаг имеет форму текста на языке Java с комментариями.
// описать методы и переменные
public void ListStudents () throws SQLException
{
int i, noOfColumns;
String stNo, stFName, stLName;
// инициализировать и загрузить драйвер JDBC-ODBC
Class.forName ("jdbc.odbc.JdbcOdbcDriver");
// создать объект Connection
Connection ex1Con = DriverManager.getConnection (
"jdbc:odbc:StudentDB;uid="admin";pw="sa"");
// создать простой объект Statement
Statement ex1Stmt = ex1Con.createStatement ();
// Создать строку SQL, передать ее СУБД и
// выполнить SQL-оператор
ResultSet ex1rs = ex1Stmt.executeQuery (
"SELECT StudentNumber, FirstName, LastName FROM Students");
// Обработать каждый ряд и вывести результат на консоль
System.out.println ("Student Number First Name Last Name");
while (ex1rs.next())
{
stNo = ex1rs.getString (1);
stFName = ex1rs.getString (2);
stLName = ex1rs.getString (3);
System.out.println (stNo, stFName, stLName);
}
}
В следующем примере поле firstName таблицы Students изменяется. Доступ осуществляется через поле StudentNumber.
// описать методы, переменные и параметры
public void UpdateStudentName (String stFName, String stLName, String stNo)
throws SQLException
{
int retValue;
//инициализировать и загрузить драйвер JDBC-ODBC
Class.forName ("jdbc.odbc.JdbcOdbcDriver");
// создать объект Connection
Connection ex1Con = DriverManager.getConnection (
"jdbc:odbc:StudentDB;uid="admin";pw="sa"");
// создать простой объект Statement
Statement ex1Stmt = ex1Con.createStatement ();
// Создать строку SQL, передать ее СУБД и
// выполнить SQL-оператор
String SQLBuffer = "UPDATE Students SET FirstName =" +
stFName + ", lastName =" + stLName +
"WHERE StudentNumber = " + stNo;
retValue = ex1Stmt.executeUpdate (SQLBuffer);
System.out.println ("Модифицированно " + retValue +
" строк в базе данных.")
}
Рис.21. Интерфейс для регистрации пользователя в АИС.
Таким образом, взаимодействие с базами данных из Java также отличается простотой и гибкостью, связанной с эффективной реализацией JDBC API. В сочетании со своей природной платформо-независимостью, Java предоставляет уникальный инструмент для создания интерактивных распределенных информационно-обучающих систем на база Internet/Intranet - технологий.
Основными сложностями при реализации корпоративных систем на базе данной архитектуры являются: