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

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

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

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

Sun Microsystems выпустил JDBC как часть Комплект для разработки Java (JDK) 1.1 от 19 февраля 1997 г.[1]С тех пор он был частью Платформа 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).[2]

JDBC 4.1, указан в версии обслуживания 1 JSR 221[3] и включен в Java SE 7.[4]

JDBC 4.2, указан в версии обслуживания 2 JSR 221[5] и включен в Java SE 8.[6]

Последняя версия, JDBC 4.3, указана в техническом выпуске 3 JSR 221.[7] и включен в Java SE 9.[8]

Функциональность

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

Соединения JDBC поддерживают создание и выполнение операторов. Это могут быть операторы обновления, такие как SQL СОЗДАЙТЕ, ВСТАВЛЯТЬ, ОБНОВИТЬ и УДАЛИТЬ, или они могут быть операторами запроса, такими как ВЫБРАТЬ. Кроме того, хранимые процедуры могут быть вызваны через соединение JDBC. JDBC представляет операторы с использованием одного из следующих классов:

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

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

Расширение базового JDBC API есть в javax.sql.

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

Типы баз данных хоста, в которые Java может конвертировать с помощью функции
Тип данных OraclesetXXX () Методы
СИМВОЛsetString ()
VARCHAR2setString ()
НОМЕРsetBigDecimal ()
setBoolean ()
setByte ()
setShort ()
setInt ()
setLong ()
setFloat ()
setDouble ()
ЦЕЛОЕsetInt ()
ПЛАВАТЬsetDouble ()
CLOBsetClob ()
BLOBsetBlob ()
СЫРОЙsetBytes ()
LONGRAWsetBytes ()
ДАТАsetDate ()
установить время()
setTimestamp ()


Примеры

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

Связь conn = DriverManager.getConnection(     "jdbc: somejdbcvendor: другие данные, необходимые для некоторых поставщиков jdbc",     "мой логин",     "мой пароль");пытаться {     / * здесь вы используете соединение * /} наконец-то {    // Важно закрыть соединение, когда вы закончите с ним    пытаться {         conn.Закрыть();    } ловить (Метательный е) { / * Распространение исходного исключения                                вместо того, который вы хотите просто зарегистрировать * /         регистратор.предупреждать(«Не удалось закрыть соединение JDBC»,е);    }}

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

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

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

пытаться (Заявление stmt = conn.createStatement()) {    stmt.executeUpdate(«ВСТАВИТЬ В MyTable (имя) ЗНАЧЕНИЯ ('мое имя')»);}

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

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

пытаться (Заявление stmt = conn.createStatement();    ResultSet RS = stmt.executeQuery(«ВЫБРАТЬ * ИЗ MyTable»)) {    пока (RS.следующий()) {        int numColumns = RS.getMetaData().getColumnCount();        за (int я = 1; я <= numColumns; я++) {           // Номера столбцов начинаются с 1.           // Также в наборе результатов есть много методов для возврата           // столбец как определенный тип. См. Документацию Sun           // для списка допустимых преобразований.           Система.из.println( "СТОЛБЕЦ " + я + " = " + RS.getObject(я));        }    }}

Пример Подготовленное заявление запрос, используя conn и класс из первого примера.

пытаться (Подготовленное заявление пс =    conn.подготовить заявление("ВЫБРАТЬ i. *, J. * ИЗ Omega i, Zappa j ГДЕ i.name =? И j.num =?")) {    // В подготавливаемом операторе SQL каждый вопросительный знак является заполнителем    // это должно быть заменено значением, которое вы предоставляете через вызов метода "set".    // Следующие два вызова метода заменяют два заполнителя; первый    // заменяется строковым значением, а второе целочисленным значением.    пс.setString(1, "Бедный Йорик");    пс.setInt(2, 8008);    // ResultSet, rs, передает результат выполнения оператора SQL.    // Каждый раз, когда вы вызываете rs.next (), внутренний указатель строки или курсор,    // переходит к следующей строке результата. Курсор изначально    // размещается перед первой строкой.    пытаться (ResultSet RS = пс.executeQuery()) {        пока (RS.следующий()) {            int numColumns = RS.getMetaData().getColumnCount();            за (int я = 1; я <= numColumns; я++) {                // Номера столбцов начинаются с 1.                // Также в наборе результатов есть много методов для возврата                // столбец как определенный тип. См. Документацию Sun                // для списка допустимых преобразований.                Система.из.println("СТОЛБЕЦ " + я + " = " + RS.getObject(я));            } // за        } // пока    } // пытаться} // пытаться

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

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

логический autoCommitDefault = conn.getAutoCommit();пытаться {    conn.setAutoCommit(ложный);    / * Здесь вы выполняете операторы против conn транзакционно * /    conn.совершить();} ловить (Метательный е) {    пытаться { conn.откат(); } ловить (Метательный е) { регистратор.предупреждать(«Не удалось откатить транзакцию», е); }    бросать е;} наконец-то {    пытаться { conn.setAutoCommit(autoCommitDefault); } ловить (Метательный е) { регистратор.предупреждать(«Не удалось восстановить настройку AutoCommit»,е); }}

Для примера CallableStatement (чтобы вызвать хранимые процедуры в базе данных), см. Руководство по JDBC API документация.

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


Драйверы JDBC

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

Типы

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

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

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

Источники

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

Смотрите также

Рекомендации

  1. ^ "Sun Ships JDK 1.1 - включая Javabeans". www.sun.com. Sun Microsystems. 1997-02-19. Архивировано из оригинал на 2008-02-10. Получено 2010-02-15. 19 февраля 1997 г. - JDK 1.1 [...] теперь доступен [...]. Этот выпуск JDK включает: [...] новые надежные функции, включая JDBC для подключения к базе данных.
  2. ^ Версия спецификации JDBC API: 4.0.
  3. ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
  4. ^ «JDBC 4.1». docs.oracle.com. Получено 22 марта 2018.
  5. ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
  6. ^ «JDBC 4.2». docs.oracle.com. Получено 22 марта 2018.
  7. ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
  8. ^ "java.sql (Java SE 9 и JDK 9)". docs.oracle.com. Получено 22 марта 2018.
  9. ^ "Java JDBC API". docs.oracle.com. Получено 22 марта 2018.
  10. ^ Гринвальд, Рик; Stackowiak, Роберт; Стерн, Джонатан (1999). Oracle Essentials: база данных Oracle 10g. Essentials Series (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc. (опубликовано в 2004 г.). п. 318. ISBN  9780596005856. Получено 2016-11-03. Драйвер JDBC в базе данных (JDBC KPRB)[:] Java-код использует версию JDBC KPRB (Kernel Program Bundled) для доступа к SQL на том же сервере.
  11. ^ «Драйверы JDBC - Программное обеспечение CData». Программное обеспечение CData. Получено 22 марта 2018.
  12. ^ «Драйверы JDBC - Программное обеспечение CData». Программное обеспечение CData. Получено 22 марта 2018.
  13. ^ «Новый драйвер JDBC типа 5 - DataDirect Connect».
  14. ^ «Доступ к внешним базам данных из RPG с JDBCR4 Meat of the Matter». 28 июня 2012 г.. Получено 12 апреля 2016.
  15. ^ Суале Фатехи. "SchemaCrawler". SourceForge.

внешняя ссылка