Подключение к базе данных Java

редактировать
JDBC
Разработчик (и) Oracle Corporation
Стабильный выпуск JDBC 4.3 / 21 сентября, 2017 (2017-09-21)
Операционная система Кросс-платформенность
Тип API доступа к данным
Веб-сайтРуководство по JDBC API

Подключение к базе данных Java ( JDBC ) - это интерфейс прикладного программирования (API) для языка программирования Java, который определяет, как клиент может получить доступ к базе данных. Это технология доступа к данным на основе Java, используемая для подключения к базе данных Java. Это часть платформы Java Standard Edition от Oracle Corporation. Он предоставляет методы для запроса и обновления данных в базе данных и ориентирован на реляционные базы данных. Мост JDBC-to- ODBC позволяет подключаться к любому ODBC-доступному источнику данных в среде хоста виртуальной машины Java (JVM).

Содержание

  • 1 История и реализация
  • 2 Функциональные возможности
  • 3 Примеры
  • 4 Драйверы JDBC
    • 4.1 Типы
    • 4.2 Источники
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки

История и реализация

Sun Microsystems выпустила JDBC как часть Java Development Kit (JDK) 1.1 19 февраля 1997 года. С тех пор он является частью Платформа Java, стандартный выпуск (Java SE).

Классы JDBC содержатся в пакете Java java.sql и javax.sql .

Начиная с версии 3.1, JDBC имеет был разработан в рамках процесса сообщества Java. JSR 54 определяет JDBC 3.0 (включенный в J2SE 1.4), JSR 114 определяет дополнения JDBC Rowset, а JSR 221 является спецификацией JDBC 4.0 (включен в Java SE 6).

JDBC 4.1, определяется отладочный выпуск 1 JSR 221 и включен в Java SE 7.

JDBC 4.2, определен отладочным выпуском 2 JSR 221 и включен в Java SE 8.

Последняя версия, JDBC 4.3, указан в версии обслуживания 3 JSR 221 и включен в Java SE 9.

Функциональные возможности

JDBC ('Java Database Connectivity') позволяет существовать и поддерживать несколько реализаций. используется тем же приложением. API предоставляет механизм для динамической загрузки правильных пакетов Java и их регистрации в диспетчере драйверов JDBC. Диспетчер драйверов используется как фабрика соединений для создания соединений JDBC.

Соединения JDBC поддерживают создание и выполнение операторов. Это могут быть операторы обновления, такие как CREATE, INSERT, UPDATE и DELETE SQL, или операторы запроса, такие как ВЫБРАТЬ. Кроме того, хранимые процедуры могут быть вызваны через соединение JDBC. JDBC представляет операторы с использованием одного из следующих классов:

Операторы обновления, такие как INSERT, UPDATE и DELETE, возвращают счетчик обновлений, который указывает, сколько строк было затронуто в базе данных. Эти заявления не содержат никакой другой информации.

Операторы запроса возвращают набор результатов строки JDBC. Набор результатов строки используется для обхода набора результатов . Отдельные столбцы в строке извлекаются либо по имени, либо по номеру столбца. В наборе результатов может быть любое количество строк. В результирующем наборе строк есть метаданные, которые описывают имена столбцов и их типы.

Существует расширение базового JDBC API в javax.sql .

. Соединения JDBC часто управляются через пул соединений , а не получаются напрямую из Водитель.

Типы баз данных хоста, в которые Java может преобразовать с помощью функции
Oracle DatatypesetXXX ()Методы
CHARsetString ()
VARCHAR2setString ()
ЧИСЛОsetBigDecimal ()
setBoolean ()
setByte ()
setShort ()
setInt ()
setLong ()
setFloat ()
setDouble ()
INTEGERsetInt ()
FLOATsetDouble ()
CLOBsetClob ()
BLOBsetBlob ()
RAWsetBytes ()
LONGRAWsetBytes ()
DATEsetDate ()
setTime ()
setTimestamp ()

.

Примеры

Когда приложению Java требуется база данных соединение, один из методов DriverManager.getConnection ()используется для создания соединения JDBC. Используемый URL-адрес зависит от конкретной базы данных и драйвера JDBC. Он всегда будет начинаться с протокола «jdbc:», а остальное зависит от конкретного поставщика.

Соединение conn = DriverManager.getConnection («jdbc: somejdbcvendor: другие данные, необходимые для какого-либо поставщика jdbc», «myLogin», «myPassword»); try {/ * здесь вы используете соединение * /} finally {// Важно закрыть соединение, когда вы закончите с ним try {conn.close (); } catch (Throwable e) {/ * Распространение исходного исключения вместо того, которое вы хотите просто зарегистрировать * / logger.warn («Не удалось закрыть соединение JDBC», e); }}

Начиная с Java SE 7 вы можете использовать оператор Java try-with-resources, чтобы упростить приведенный выше код:

try (Connection conn = DriverManager.getConnection ("jdbc: somejdbcvendor: другие данные, необходимые для некоторых поставщиков jdbc "," myLogin "," myPassword ")) {/ * вы используете здесь соединение * /} // виртуальная машина позаботится о закрытии соединения

Как только соединение установлено, заявление может быть создано.

try (Инструкция stmt = conn.createStatement ()) {stmt.executeUpdate ("ВСТАВИТЬ В MyTable (имя) ЗНАЧЕНИЯ ('мое имя')"); }

Обратите внимание, что Connections, Statements и ResultSets часто связывают ресурсы операционной системы, такие как сокеты или файловые дескрипторы. В случае подключений к удаленным серверам баз данных на сервере привязываются дополнительные ресурсы, например, курсоры для открытых в данный момент ResultSets. Жизненно важно close ()любой объект JDBC, как только он сыграл свою роль; На сборку мусора нельзя полагаться. Вышеупомянутая конструкция try-with-resources - это шаблон кода, который устраняет это.

Данные извлекаются из базы данных с помощью механизма запросов к базе данных. В приведенном ниже примере показано создание оператора и выполнение запроса.

try (Statement stmt = conn.createStatement (); ResultSet rs = stmt.executeQuery ("SELECT * FROM MyTable")) {while (rs.next ()) {int numColumns = rs.getMetaData (). GetColumnCount (); for (int i = 1; i <= numColumns; i++) { // Column numbers start at 1. // Also there are many methods on the result set to return // the column as a particular type. Refer to the Sun documentation // for the list of valid conversions. System.out.println( "COLUMN " + i + " = " + rs.getObject(i)); } } }

Пример запроса PreparedStatementс использованием connи класса из первого примера.

try (PreparedStatement ps = conn.prepareStatement ( "SELECT i. *, J. * FROM Omega i, Zappa j WHERE i.name =? AND j.num =?")) {// В подготавливаемом операторе SQL каждый вопросительный знак является заполнителем, // который должен быть заменено значением, которое вы предоставляете через вызов метода "set". // Следующие два вызова метода заменяют два заполнителя: первый // заменяется строковым значением, а второй - целочисленным значением. ps.setString ( 1, «Бедный Йорик»); ps.setInt (2, 8008); // ResultSet, rs, передает результат выполнения оператора SQL. // Каждый раз, когда вы вызываете rs.next (), внутренний указатель строки, или курсор, // перемещается к следующей строке результата. Курсор изначально // располагается перед первой строкой. try (ResultSet rs = ps.executeQuery ()) {while (rs.next ()) {int numColumns = rs.getMetaData (). getColumnCount (); for (int i = 1; i <= numColumns; i++) { // Column numbers start at 1. // Also there are many methods on the result set to return // the column as a particular type. Refer to the Sun documentation // for the list of valid conversions. System.out.println("COLUMN " + i + " = " + rs.getObject(i)); } // for } // while } // try } // try

Если да операция tabase не выполняется, JDBC вызывает SQLException . Обычно очень мало что можно сделать для восстановления после такой ошибки, кроме как зарегистрировать ее как можно более подробно. Рекомендуется преобразовать SQLException в исключение домена приложения (непроверенное), которое в конечном итоге приведет к откату транзакции и уведомлению пользователя.

Пример транзакции базы данных :

логическое значение autoCommitDefault = conn.getAutoCommit (); попробуйте {conn.setAutoCommit (false); / * Здесь вы выполняете операторы против conn транзакционно * / conn.commit (); } catch (Throwable e) {попробуйте {conn.rollback (); } catch (Throwable e) {logger.warn («Не удалось откатить транзакцию», e); } throw e; } наконец {попробуйте {conn.setAutoCommit (autoCommitDefault); } catch (Throwable e) {logger.warn («Не удалось восстановить настройку AutoCommit», e); }}

Пример CallableStatement(для вызова хранимых процедур в базе данных) см. В документации по JDBC API Guide.

импорт java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; открытый класс Mydb1 {статический строковый URL = "jdbc: mysql: // localhost / mydb"; public static void main (String args) {попробуйте {Class.forName ("com.mysql.jdbc.Driver"); Соединение соединения = DriverManager.getConnection (URL, «корень», «корень»); Заявление stmt = conn.createStatement (); String sql = "ВСТАВИТЬ В ЗНАЧЕНИЯ emp1 ('pctb5361',‘ kiril ',' john ', 968666668) »; stmt.executeUpdate (sql); System.out.println («Вставлены записи в таблицу...»); } catch (исключение e) {e.printStackTrace (); }}}

.

Драйверы JDBC

Драйверы JDBC - это клиентские адаптеры (установленные на клиентском компьютере, а не на сервере), которые преобразуют запросы из программ Java в протокол, который СУБД можно понять.

Типы

Коммерческие и бесплатные драйверы обеспечивают подключение к большинству серверов реляционных баз данных. Эти драйверы относятся к одному из следующих типов:

  • Тип 1, который вызывает собственный код локально доступного драйвера ODBC. (Примечание: в JDBC 4.2 мост JDBC-ODBC был удален)
  • Тип 2, который вызывает собственную библиотеку поставщика базы данных на стороне клиента. Затем этот код обращается к базе данных по сети.
  • Тип 3, драйвер на чистом Java, который взаимодействует с промежуточным программным обеспечением на стороне сервера, которое затем обращается к базе данных.
  • Тип 4, чистый -java драйвер, который использует собственный протокол базы данных.

Обратите внимание также на тип, называемый - драйвер, встроенный с JRE в базы данных SQL с поддержкой Java. Он используется для хранимых процедур Java. Это не вписывается в схему классификации выше, хотя, вероятно, будет напоминать драйвер типа 2 или 4 (в зависимости от того, реализована ли сама база данных на Java или нет). Примером этого является драйвер KPRB (Kernel Program Bundled), поставляемый с Oracle RDBMS. "jdbc: default: connection" предлагает относительно стандартный способ создания такого соединения (по крайней мере, база данных Oracle и Apache Derby поддерживают его). Однако в случае внутреннего драйвера JDBC клиент JDBC фактически работает как часть базы данных, к которой осуществляется доступ, и поэтому может обращаться к данным напрямую, а не через сетевые протоколы.

Источники

  • Oracle предоставляет список некоторых драйверов и поставщиков JDBC.
  • Simba Technologies поставляет SDK для создания пользовательских драйверов JDBC для любого пользовательского / частного реляционного источника данных
  • Программное обеспечение CData поставляет драйверы JDBC типа 4 для различных приложений, баз данных и веб-API.
  • Драйверы JDBC типа 4 RSSBus для приложений, баз данных и веб-служб
  • DataDirect Technologies предоставляет полный набор быстрых драйверов JDBC типа 4 для всех основных баз данных, которые они рекламируют как тип 5
  • . Программное обеспечение IDS предоставляет драйвер JDBC типа 3 для одновременного доступа ко всем основным базам данных. Поддерживаемые функции включают кэширование набора результатов, шифрование SSL, настраиваемый источник данных, dbShield
  • JDBaccess - это библиотека сохраняемости Java для MySQL и Oracle, которая определяет основные операции доступа к базе данных в простой в использовании API выше JDBC
  • предоставляет набор полностью сертифицированных Sun J2EE высокопроизводительных драйверов JDBC.
  • JDBCR4 - служебная программа, написанная Скоттом Клементом для обеспечения доступа к JDBC из RPG на IBM i.
  • HSQLDB - это РСУБД с драйвером JDBC, доступная по лицензии BSD.
  • SchemaCrawler - это API с открытым исходным кодом, который использует JDBC и делает метаданные базы данных доступными в виде простых старых объектов Java (POJO)

См. Также

Ссылки

Внешние ссылки

На Викискладе есть средства массовой информации, связанные с JDBC.
В Викиучебнике есть книга по теме: Программирование на Java / Программирование баз данных
Последняя правка сделана 2021-05-24 03:57:02
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте