Разработчик (и) | 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).
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 представляет операторы с использованием одного из следующих классов:
Statement
- оператор каждый раз отправляется на сервер базы данных.PreparedStatement
- оператор кэшируется и то путь выполнения заранее определен на сервере базы данных, что позволяет ему эффективно выполняться несколько раз.CallableStatement
- используется для выполнения хранимых процедур в базе данных.Операторы обновления, такие как INSERT, UPDATE и DELETE, возвращают счетчик обновлений, который указывает, сколько строк было затронуто в базе данных. Эти заявления не содержат никакой другой информации.
Операторы запроса возвращают набор результатов строки JDBC. Набор результатов строки используется для обхода набора результатов . Отдельные столбцы в строке извлекаются либо по имени, либо по номеру столбца. В наборе результатов может быть любое количество строк. В результирующем наборе строк есть метаданные, которые описывают имена столбцов и их типы.
Существует расширение базового JDBC API в javax.sql
.
. Соединения JDBC часто управляются через пул соединений , а не получаются напрямую из Водитель.
Oracle Datatype | setXXX () Методы |
---|---|
CHAR | setString () |
VARCHAR2 | setString () |
ЧИСЛО | setBigDecimal () |
setBoolean () | |
setByte () | |
setShort () | |
setInt () | |
setLong () | |
setFloat () | |
setDouble () | |
INTEGER | setInt () |
FLOAT | setDouble () |
CLOB | setClob () |
BLOB | setBlob () |
RAW | setBytes () |
LONGRAW | setBytes () |
DATE | setDate () |
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 - это клиентские адаптеры (установленные на клиентском компьютере, а не на сервере), которые преобразуют запросы из программ Java в протокол, который СУБД можно понять.
Коммерческие и бесплатные драйверы обеспечивают подключение к большинству серверов реляционных баз данных. Эти драйверы относятся к одному из следующих типов:
Обратите внимание также на тип, называемый - драйвер, встроенный с JRE в базы данных SQL с поддержкой Java. Он используется для хранимых процедур Java. Это не вписывается в схему классификации выше, хотя, вероятно, будет напоминать драйвер типа 2 или 4 (в зависимости от того, реализована ли сама база данных на Java или нет). Примером этого является драйвер KPRB (Kernel Program Bundled), поставляемый с Oracle RDBMS. "jdbc: default: connection" предлагает относительно стандартный способ создания такого соединения (по крайней мере, база данных Oracle и Apache Derby поддерживают его). Однако в случае внутреннего драйвера JDBC клиент JDBC фактически работает как часть базы данных, к которой осуществляется доступ, и поэтому может обращаться к данным напрямую, а не через сетевые протоколы.
На Викискладе есть средства массовой информации, связанные с JDBC. |
В Викиучебнике есть книга по теме: Программирование на Java / Программирование баз данных |
java.sql
API Javadoc документацияjavax.sql
API Javadoc документация