Подключение к базе данных Java
Java Database Connectivity ( JDBC ) — это интерфейс прикладного программирования (API) для языка программирования Java , который определяет, как клиент может получить доступ к базе данных . Это технология доступа к данным на основе Java, используемая для подключения к базе данных Java. Это часть платформы Java Standard Edition от Oracle Corporation . Он предоставляет методы запроса и обновления данных в базе данных и ориентирован на реляционные базы данных . Мост JDBC- ODBC позволяет подключаться к любому источнику данных, доступному через ODBC, в среде хоста виртуальной машины Java (JVM).
Разработчики) | Корпорация Oracle |
---|---|
Стабильная версия | JDBC 4.3
/ 21 сентября 2017 г. |
Операционная система | Кросс-платформенный |
Тип | API доступа к данным |
Веб-сайт | Руководство по API JDBC |
и реализация История
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, а 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-версия | Тип выпуска | Дата выпуска |
---|---|---|---|
1.1 | JDK 1.1 | Основной | 1997-02-19. [1] |
3.0 | J2SE 1.4 | Основной | 2002-05-09 |
4.0 | Ява ЮВ 6 | Основной | 2006-12-11 |
4.1 | Ява ЮВ 7 | Обслуживание | 2011-10-13 |
4.2 | Ява ЮВ 8 | Обслуживание | 2014-03-04 |
4.3 | Ява ЮВ 9 | Обслуживание | 2017-09-21 |
Функциональность [ править ]
Тип данных Oracle | setXXX() Методы
|
---|---|
ЧАР | setString()
|
ВАРЧАР2 | setString()
|
ЧИСЛО | setBigDecimal()
|
setBoolean()
| |
setByte()
| |
setShort()
| |
setInt()
| |
setLong()
| |
setFloat()
| |
setDouble()
| |
ЦЕЛОЕ ЧИСЛО | setInt()
|
ПЛАВАТЬ | setDouble()
|
КЛОБ | setClob()
|
BLOB-объект | setBlob()
|
СЫРОЙ | setBytes()
|
ЛОНГРО | setBytes()
|
ДАТА | setDate()
|
setTime()
| |
setTimestamp()
|
Поскольку JDBC («Подключение к базе данных Java») представляет собой в основном набор определений и спецификаций интерфейсов, он позволяет существовать нескольким реализациям этих интерфейсов и использоваться одним и тем же приложением во время выполнения. API предоставляет механизм динамической загрузки правильных пакетов Java и их регистрации в диспетчере драйверов JDBC ( DriverManager
). DriverManager
используется как Connection
фабрика для создания соединений JDBC.
Соединения JDBC поддерживают создание и выполнение операторов. Соединения JDBC поддерживают операторы обновления, такие как SQL CREATE , INSERT , UPDATE и DELETE , или операторы запроса, такие как SELECT . Кроме того, хранимые процедуры могут вызываться через соединение JDBC. JDBC представляет операторы, используя один из следующих классов:
Statement
-Statement
отправляется на сервер базы данных каждый раз. Другими словами,Statement
методы выполняются с использованием операторов SQL для полученияResultSet
объект, содержащий данные. [9]PreparedStatement
–PreparedStatement
является субинтерфейсомStatement
интерфейс. [9] Оператор кэшируется, а затем путь выполнения заранее определяется на сервере базы данных, что позволяет эффективно выполнять его несколько раз. [9]PreparedStatement
используется для выполнения предварительно скомпилированных операторов SQL. [9] Выполнение предварительно скомпилированных операторов повышает эффективность и производительность выполнения операторов.PreparedStatement
часто используется для динамических операторов, когда некоторые входные параметры должны быть переданы в целевую базу данных. [10]
PreparedStatement
позволяет динамическому запросу изменяться в зависимости от параметра запроса. [11]
CallableStatement
–CallableStatement
является субинтерфейсомStatement
интерфейс. [11] Он используется для выполнения хранимых процедур в базе данных. [11] [12] И входные, и выходные параметры должны передаваться в базу данных для хранимых процедур. [13]
Операторы обновления, такие как INSERT, UPDATE и DELETE, возвращают счетчик обновлений, указывающий количество затронутых строк в базе данных в виде целого числа. [13] Эти операторы не возвращают никакой другой информации.
Операторы запроса возвращают набор результатов строк JDBC. Набор результатов строк используется для обхода набора результатов . Отдельные столбцы в строке извлекаются либо по имени, либо по номеру столбца. В наборе результатов может быть любое количество строк. Результирующий набор строк содержит метаданные, описывающие имена столбцов и их типы.
Существует расширение базового API JDBC в javax.sql
.
Соединения JDBC часто управляются через пул соединений , а не получаются непосредственно из драйвера. [14]
Примеры [ править ]
Когда приложению Java требуется соединение с базой данных, один из DriverManager.getConnection()
методы используются для создания JDBC Connection
. Используемый URL-адрес зависит от конкретной базы данных и драйвера JDBC. Он всегда начинается с протокола «jdbc:», но все остальное зависит от конкретного поставщика.
Подключение подключения = DriverManager . getConnection (
"jdbc:somejdbcvendor:другие данные, необходимые некоторым поставщикам jdbc" ,
"myLogin" ,
"myPassword" );
try {
/* здесь вы используете соединение */
} finally {
//Важно закрыть соединение, когда вы закончите с ним,
try {
conn . закрывать ();
} catch ( Throwable e ) { /* Распространить исходное исключение
вместо того, которое вы хотите только что зарегистрировать */
logger . alert ( "Не удалось закрыть соединение JDBC" , e );
}
}
Начиная с Java SE 7, вы можете использовать оператор Java try-with-resources, чтобы упростить приведенный выше код:
try ( Connection conn = DriverManager . getConnection (
"jdbc:somejdbcvendor:other data, необходимые некоторому поставщику jdbc" ,
"myLogin" ,
"myPassword" )) {
/* вы используете соединение здесь */
} // виртуальная машина позаботится об этом о закрытии соединения
Как только соединение будет установлено, Statement
можно создать.
попробуйте ( Заявление stmt = conn . createStatement ()) {
stmt . ExecuteUpdate ( "INSERT INTO MyTable(name) VALUES ("мое имя")" );
}
Обратите внимание, что Connection
с, Statement
песок ResultSet
Они часто связывают ресурсы операционной системы , такие как сокеты или файловые дескрипторы . В случае Connection
s к удаленным серверам баз данных, на сервере привязываются дополнительные ресурсы, например, курсоры для открытых в данный момент ResultSet
с.
Очень важно close()
любой объект JDBC, как только он сыграл свою роль;
На сбор мусора не следует полагаться.
Вышеупомянутая конструкция try-with-resources представляет собой шаблон кода, который позволяет избежать этого.
Данные извлекаются из базы данных с помощью механизма запросов к базе данных. В приведенном ниже примере показано создание инструкции и выполнение запроса.
try ( Statement stmt = conn . createStatement ();
ResultSet rs = stmt.executeQuery ) ( « SELECT * FROM MyTable» )
) {
while ( rs . next () {
int numColumns = rs . ПолучитьМетаДанные (). ПолучитьКолумнКаунт ();
for ( int i = 1 ; i <= numColumns ; i ++ ) {
// Номера столбцов начинаются с 1.
// Кроме того, в наборе результатов существует множество методов, возвращающих
// столбец как определенный тип. Обратитесь к документации Sun
за списком допустимых преобразований.
Система . вне . println ( "COLUMN" + i + " = " + rs . getObject ( i ));
}
}
}
Следующий код является примером PreparedStatement
запрос, который использует conn
и класс из первого примера:
try ( PreparedStatement ps =
conn.prepreStatement ) ( "SELECT i.*, j .* FROM Omega i, Zappa j WHERE i.name = ? AND j.num = ?" )
{ //
В подготавливаемом операторе SQL каждый Вопросительный знак — это заполнитель
, // который необходимо заменить значением, которое вы указываете при вызове метода set.
// Следующие два вызова метода заменяют два заполнителя; первое
// заменяется строковым значением, а второе — целочисленным значением.
пс . setString ( 1 , «Бедный Йорик» );
пс . setInt ( 2 , 8008 );
// ResultSet, rs, передает результат выполнения оператора SQL.
// Каждый раз, когда вы вызываете rs.next(), внутренний указатель строки или курсор
// перемещается на следующую строку результата. Курсор изначально
располагается // перед первой строкой.
попробуйте ( ResultSet rs = ps.executeQuery . ( )) {
как ( rs.next numColumns в ()) {
int время = rs то ПолучитьМетаДанные (). ПолучитьКолумнКаунт ();
for ( int i = 1 ; i <= numColumns ; i ++ ) {
// Номера столбцов начинаются с 1.
// Кроме того, в наборе результатов существует множество методов, возвращающих
// столбец как определенный тип. Обратитесь к документации Sun
за списком допустимых преобразований.
Система . вне . println ( "COLUMN" + i + " = " + rs . getObject ( i ));
} // for
} // while
} // пытаемся
} // пытаемся
Если операция с базой данных завершается неудачно, JDBC выдает ошибку. SQLException
. Обычно мало что можно сделать, чтобы исправить такую ошибку, кроме как записать ее в журнал с максимально подробным описанием. Рекомендуется, чтобы SQLException
быть преобразовано в исключение домена приложения (непроверяемое), что в конечном итоге приводит к откату транзакции и уведомлению пользователя.
Следующий код является примером транзакции базы данных :
логическое значение autoCommitDefault = conn . getAutoCommit ();
попробуй {
подключ . setAutoCommit ( ложь );
/* Здесь вы выполняете инструкции против conn транзакционно */
conn . совершить ();
} catch ( Throwable e ) {
попробуйте { conn . откат (); } catch ( Throwable e ) { logger . alert ( "Не удалось откатить транзакцию" , e ); }
бросить е ;
} наконец {
попробуйте { conn . setAutoCommit ( autoCommitDefault ); } catch ( Throwable e ) { logger . alert ( "Не удалось восстановить настройки AutoCommit" , e ); }
}
Для примера CallableStatement
(для вызова хранимых процедур в базе данных) см. документацию JDBC API Guide .
импортировать java.sql.Connection ;
импортировать java.sql.DriverManager ;
импортировать java.sql.Statement ;
общественный класс Mydb1 {
статический строки URL-адрес = "jdbc:mysql://localhost/mydb" ;
public static void main ( String [] args ) {
try {
Class . forName ( "com.mysql.jdbc.Driver" );
Подключение подключения = DriverManager . getConnection ( URL , «корень» , «корень» );
Заявление stmt = conn . createStatement ();
String sql = "ВСТАВИТЬ В ЗНАЧЕНИЯ emp1 ('pctb5361', 'кирил', 'джон', 968666668)" ;
стмт . выполнитьОбновление ( SQL );
Система . вне . println ( "В таблицу добавлены записи..." );
} catch ( Исключение е ) {
е . печатьStackTrace ();
}
}
}
Драйверы JDBC [ править ]
на стороне клиента Драйверы JDBC — это адаптеры (устанавливаемые на клиентском компьютере, а не на сервере), которые преобразуют запросы от программ Java в протокол, понятный СУБД.
Типы [ править ]
Коммерческие и бесплатные драйверы обеспечивают подключение к большинству серверов реляционных баз данных. Эти драйверы относятся к одному из следующих типов:
- Введите 1 , который вызывает собственный код локально доступного драйвера ODBC. (Примечание. В JDBC 4.2 мост JDBC-ODBC был удален. [15] )
- Тип 2 , который вызывает собственную библиотеку поставщика базы данных на стороне клиента. Затем этот код обращается к базе данных по сети.
- Тип 3 — драйвер чистой Java, который взаимодействует с промежуточным программным обеспечением на стороне сервера, которое затем взаимодействует с базой данных.
- Тип 4 — драйвер чистой Java, использующий собственный протокол базы данных.
Обратите также внимание на тип, называемый внутренним драйвером JDBC — драйвер, встроенный в JRE в базы данных SQL с поддержкой Java. Он используется для хранимых процедур Java . Это не вписывается в приведенную выше схему классификации, хотя, скорее всего, будет напоминать драйвер либо типа 2, либо типа 4 (в зависимости от того, реализована ли сама база данных на Java или нет). Примером этого является драйвер KPRB (Kernel Program Bundled). [16] поставляется с СУБД Oracle . «jdbc:default:connection» предлагает относительно стандартный способ создания такого соединения (по крайней мере, база данных Oracle и Apache Derby поддерживают его). Однако в случае внутреннего драйвера JDBC клиент JDBC фактически работает как часть базы данных, к которой осуществляется доступ, и поэтому может обращаться к данным напрямую, а не через сетевые протоколы.
Источники [ править ]
- Oracle предоставляет список некоторых драйверов и поставщиков JDBC.
- Simba Technologies поставляет SDK для создания пользовательских драйверов JDBC для любого пользовательского/собственного реляционного источника данных.
- CData Software поставляет драйверы JDBC типа 4 для различных приложений, баз данных и веб-API. [17]
- Драйверы JDBC RSSBus Type 4 для приложений, баз данных и веб-сервисов [18]
- DataDirect Technologies предоставляет полный набор быстрых драйверов JDBC типа 4 для всех основных баз данных, которые они рекламируют как типа 5. [19]
- Программное обеспечение IDS предоставляет драйвер JDBC типа 3 для одновременного доступа ко всем основным базам данных. Поддерживаемые функции включают кэширование набора результатов, SSL-шифрование, собственный источник данных, dbShield.
- JDBaccess — это библиотека персистентности Java для MySQL и Oracle , которая определяет основные операции доступа к базе данных с помощью простого в использовании API поверх JDBC.
- JNetDirect предоставляет набор высокопроизводительных драйверов JDBC, полностью сертифицированных Sun J2EE.
- JDBCR4 — это сервисная программа, написанная Скоттом Клементом для обеспечения доступа к JDBC из RPG на IBM i . [20]
- HSQLDB — это СУБД с драйвером JDBC, доступная по лицензии BSD.
- SchemaCrawler [21] — это API с открытым исходным кодом, который использует JDBC и делает метаданные базы данных доступными в виде простых старых объектов Java (POJO).
См. также [ править ]
- Доступ к данным GNU (GDA)
- JDBCFacade
- Открытое подключение к базе данных (ODBC)
- Объектно-реляционное отображение (ORM)
Цитаты [ править ]
- ^ Перейти обратно: а б
«Sun Ships JDK 1.1 — Javabeans включены» . www.sun.com . Сан Микросистемс . 19 февраля 1997 г. Архивировано из оригинала 10 февраля 2008 г. Проверено 15 февраля 2010 г.
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 г.
- ^ Перейти обратно: а б с д Бай 2022 , с. 74.
- ^ Bai 2022 , стр. 122–124, §4.2.3.5 Подробнее о методах выполнения.
- ^ Перейти обратно: а б с Bai 2022 , стр. 72–74, §3.2 Компоненты и архитектура JDBC.
- ^ Хорстманн 2022 , §5.5.3 Экранирование SQL.
- ^ Перейти обратно: а б Bai 2022 , стр. 122–124, §4.2.3.5 Компоненты и архитектура JDBC.
- ^ Бай 2022 , с. 83, §3.5.1 Источник данных JDBC.
- ^ «Java JDBC API» . docs.oracle.com . Проверено 22 марта 2018 г.
- ^
Гринвальд, Рик; Стаковяк, Роберт; Стерн, Джонатан (1999). Oracle Essentials: База данных Oracle 10g . Серия Essentials (3-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc. (опубликовано в 2004 г.). п. 318. ИСБН 9780596005856 . Проверено 3 ноября 2016 г.
Драйвер 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, суть дела» . 28 июня 2012 года . Проверено 12 апреля 2016 г.
- ^ Суале Фатехи. «СхемаКраулер» . Гитхаб .
Ссылки [ править ]
- Бай, Ин (2022). Программирование баз данных SQL Server с помощью Java . Чам: Springer International Publishing . дои : 10.1007/978-3-031-06553-8 . ISBN 978-3-030-92686-1 .
- Хорстманн, Кей (15 апреля 2022 г.). CoreJava . Oracle Press Java. ISBN 0-13-787107-4 .
Внешние ссылки [ править ]
![](http://upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/40px-Wikibooks-logo-en-noslogan.svg.png)
- Руководство по API JDBC
java.sql
по API Javadoc Документацияjavax.sql
Документация по API Javadoc- Платформа O/R Broker Scala JDBC
- SqlTool Универсальная клиентская утилита JDBC с открытым исходным кодом, работающая из командной строки. Работает с любой базой данных, поддерживающей JDBC.
- Строки URL-адреса JDBC и связанная информация обо всех базах данных.