Из Википедии, бесплатной энциклопедии
  (Перенаправлено из JDBC )
Перейти к навигации Перейти к поиску

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

История и реализация [ править ]

Sun Microsystems выпустила JDBC как часть Java Development Kit (JDK) 1.1 19 февраля 1997 года. [1] С тех пор он является частью платформы Java Standard Edition (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 CREATE , INSERT , UPDATE и DELETE , или операторы запроса, такие как SELECT . Кроме того, хранимые процедуры могут быть вызваны через соединение JDBC. JDBC представляет операторы с использованием одного из следующих классов:

  • Statement - выписка каждый раз отправляется на сервер базы данных.
  • PreparedStatement- оператор кэшируется, а затем путь выполнения предварительно определяется на сервере базы данных, что позволяет эффективно выполнять его несколько раз.
  • CallableStatement- используется для выполнения хранимых процедур в базе данных.

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

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

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

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


Примеры [ править ]

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

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

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

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

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

попробуйте  ( Заявление  STMT  =  подкл . createStatement ())  {  STMT . executeUpdate ( " ВСТАВИТЬ В MyTable (имя) ЗНАЧЕНИЯ ('мое имя')" ); }

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

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

попробуйте  ( Заявление  STMT  =  подкл . createStatement ();  ResultSet  RS  =  STMT . ExecuteQuery ( "SELECT * FROM MyTable" ) )  { в  то время как  ( RS . следующая ())  {  Int  numColumns  =  RS . getMetaData (). getColumnCount ();  for  ( int  i  =  1 ;  i  <=  numColumns ;  i ++ )  { // Номера столбцов начинаются с 1.  // Также в наборе результатов есть много методов для возврата  // столбца как определенного типа. Обратитесь к документации Sun  // за списком допустимых преобразований.  Система . из . println (  "КОЛОНКА"  +  i  +  "="  +  rs . getObject ( i ));  }  } }

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

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

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

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

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

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

import  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 );  Система . из . println ( "Вставлены записи в таблицу ..." );  }  catch  ( исключение  e )  {  e . 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 RDBMS . "jdbc: default: connection" предлагает относительно стандартный способ создания такого соединения (по крайней мере, база данных Oracle и Apache Derbyподдержите это). Однако в случае внутреннего драйвера JDBC клиент JDBC фактически работает как часть базы данных, к которой осуществляется доступ, и поэтому может обращаться к данным напрямую, а не через сетевые протоколы.

Источники [ править ]

  • Oracle предоставляет список некоторых драйверов и поставщиков JDBC.
  • Simba Technologies поставляет SDK для создания пользовательских драйверов JDBC для любого пользовательского / частного источника реляционных данных.
  • CData Software поставляет драйверы JDBC типа 4 для различных приложений, баз данных и веб-API. [11]
  • Драйверы JDBC RSSBus Type 4 для приложений, баз данных и веб-служб [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 из RPG на IBM i . [14]
  • HSQLDB - это СУБД с драйвером JDBC, доступная по лицензии BSD.
  • SchemaCrawler [15] - это API с открытым исходным кодом, который использует JDBC и делает метаданные базы данных доступными в виде простых старых объектов Java (POJO).

См. Также [ править ]

  • Доступ к данным GNU (GDA)
  • JDBCFacade
  • Открытое подключение к базе данных (ODBC)

Ссылки [ править ]

  1. ^ "Sun Ships JDK 1.1 - включая Javabeans" . www.sun.com . Sun Microsystems . 1997-02-19. Архивировано из оригинала на 2008-02-10 . Проверено 15 февраля 2010 . 19 февраля 1997 г. - JDK 1.1 [...] теперь доступен [...]. Этот выпуск JDK включает: [...] новые надежные функции, включая JDBC для подключения к базе данных.
  2. ^ Версия спецификации API JDBC: 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. ^ Гринвальд, Рик; Стаковяк, Роберт; Стерн, Джонатан (1999). Oracle Essentials: Oracle Database 10g . Essentials Series (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc. (опубликовано в 2004 г.). п. 318. ISBN 9780596005856. Проверено 3 ноября 2016 . Драйвер JDBC в базе данных (JDBC KPRB) [:] Java-код использует версию JDBC KPRB (пакетная программа ядра) для доступа к 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 .

Внешние ссылки [ править ]

  • JDBC API Guide Эта документация имеет примеры , когда ресурсы JDBC не закрыты надлежащим образом (глотание первичных исключений и будучи в состоянии вызвать NullPointerExceptions) и имеет код склонный к SQL инъекции [ править ]
  • java.sqlДокументация API Javadoc
  • javax.sql Документация API Javadoc
  • Фреймворк O / R Broker Scala JDBC
  • SqlTool Универсальная клиентская утилита JDBC с открытым исходным кодом, командной строки. Работает с любой базой данных, поддерживающей JDBC.
  • Строки URL-адресов JDBC и соответствующая информация обо всех базах данных.