Подключение к базе данных Java - Java Database Connectivity
Разработчики) | Корпорация Oracle |
---|---|
Стабильный выпуск | JDBC 4.3 / 21 сентября 2017 г. |
Операционная система | Кроссплатформенность |
Тип | 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 представляет операторы с использованием одного из следующих классов:
Заявление
- выписка каждый раз отправляется на сервер базы данных.Подготовленное заявление
- оператор кэшируется, а затем путь исполнения предварительно определено на сервере базы данных, что позволяет ему эффективно выполняться несколько раз.CallableStatement
- используется для выполнения хранимые процедуры в базе данных.
Операторы обновления, такие как INSERT, UPDATE и DELETE, возвращают счетчик обновлений, который указывает, сколько ряды были затронуты в базе данных. Эти заявления не содержат никакой другой информации.
Операторы запроса возвращают набор результатов строки JDBC. Набор результатов строки используется для обхода набор результатов. Индивидуальный столбцы в строке извлекаются либо по имени, либо по номеру столбца. В наборе результатов может быть любое количество строк. В результирующем наборе строк есть метаданные, которые описывают имена столбцов и их типы.
Расширение базового JDBC API есть в javax.sql
.
Соединения JDBC часто управляются через пул соединений а не полученные напрямую от водителя.
Тип данных Oracle | setXXX () Методы |
---|---|
СИМВОЛ | setString () |
VARCHAR2 | setString () |
НОМЕР | setBigDecimal () |
setBoolean () | |
setByte () | |
setShort () | |
setInt () | |
setLong () | |
setFloat () | |
setDouble () | |
ЦЕЛОЕ | setInt () |
ПЛАВАТЬ | setDouble () |
CLOB | setClob () |
BLOB | setBlob () |
СЫРОЙ | setBytes () |
LONGRAW | setBytes () |
ДАТА | 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).
Смотрите также
Рекомендации
- ^ "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 для подключения к базе данных.
- ^ Версия спецификации JDBC API: 4.0.
- ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
- ^ «JDBC 4.1». docs.oracle.com. Получено 22 марта 2018.
- ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
- ^ «JDBC 4.2». docs.oracle.com. Получено 22 марта 2018.
- ^ "Программа Java Community Process (SM) - communityprocess - mrel". jcp.org. Получено 22 марта 2018.
- ^ "java.sql (Java SE 9 и JDK 9)". docs.oracle.com. Получено 22 марта 2018.
- ^ "Java JDBC API". docs.oracle.com. Получено 22 марта 2018.
- ^ Гринвальд, Рик; 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 на том же сервере.
- ^ «Драйверы JDBC - Программное обеспечение CData». Программное обеспечение CData. Получено 22 марта 2018.
- ^ «Драйверы JDBC - Программное обеспечение CData». Программное обеспечение CData. Получено 22 марта 2018.
- ^ «Новый драйвер JDBC типа 5 - DataDirect Connect».
- ^ «Доступ к внешним базам данных из RPG с JDBCR4 Meat of the Matter». 28 июня 2012 г.. Получено 12 апреля 2016.
- ^ Суале Фатехи. "SchemaCrawler". SourceForge.
внешняя ссылка
- Руководство по JDBC API В этой документации есть примеры, в которых ресурсы JDBC не закрываются должным образом (поглощение первичных исключений и возможность вызывать исключения NullPointerExceptions), а код склонен к SQL-инъекция[нужна цитата ]
java.sql
API Javadoc документацияjavax.sql
Документация API Javadoc- O / R брокер Фреймворк Scala JDBC
- SqlTool Универсальная клиентская утилита JDBC с открытым исходным кодом, командной строкой. Работает с любой базой данных, поддерживающей JDBC.
- Строки URL-адресов JDBC и соответствующая информация для всех баз данных.