Jump to content

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

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

JDBC
Разработчик(и) Корпорация Oracle
Стабильная версия
JDBC 4.3 / 21 сентября 2017 г. ( 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-версии
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

Функциональность [ править ]

Типы баз данных хоста, в которые Java может конвертировать с помощью функции
Тип данных 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]
  • PreparedStatementPreparedStatement является субинтерфейсом Statement интерфейс. [9] Оператор кэшируется, а затем путь выполнения заранее определяется на сервере базы данных, что позволяет эффективно выполнять его несколько раз. [9] PreparedStatement используется для выполнения предварительно скомпилированных операторов SQL. [9] Выполнение предварительно скомпилированных операторов повышает эффективность и производительность выполнения операторов. PreparedStatement часто используется для динамических операторов, когда некоторые входные параметры должны быть переданы в целевую базу данных. [10]

PreparedStatement позволяет динамическому запросу изменяться в зависимости от параметра запроса. [11]

  • CallableStatementCallableStatement является субинтерфейсом Statement интерфейс. [11] Он используется для выполнения хранимых процедур в базе данных. [11] [12] И входные, и выходные параметры должны передаваться в базу данных для хранимых процедур. [13]

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

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

Существует расширение базового API JDBC в javax.sql.

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

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

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

Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword");
try {
     /* you use the connection here */
} finally {
    //It's important to close the connection when you are done with it
    try { 
        conn.close();
    } catch (Throwable e) { /* Propagate the original exception
                                instead of this one that you want just logged */ 
        logger.warn("Could not close JDBC Connection", e);
    }
}

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

try (Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword")) {
     /* you use the connection here */
}  // the VM will take care of closing the connection

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

try (Statement stmt = conn.createStatement()) {
    stmt.executeUpdate("INSERT INTO MyTable(name) VALUES ('my name')");
}

Обратите внимание, что Connectionс, Statementпесок ResultSetОни часто связывают ресурсы операционной системы, такие как сокеты или файловые дескрипторы . В случае Connections к удаленным серверам баз данных, на сервере привязываются дополнительные ресурсы, например, курсоры для открытых в данный момент ResultSetс. Очень важно 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 = ?")
) {
    // In the SQL statement being prepared, each question mark is a placeholder
    // that must be replaced with a value you provide through a "set" method invocation.
    // The following two method calls replace the two placeholders; the first is
    // replaced by a string value, and the second by an integer value.
    ps.setString(1, "Poor Yorick");
    ps.setInt(2, 8008);

    // The ResultSet, rs, conveys the result of executing the SQL statement.
    // Each time you call rs.next(), an internal row pointer, or cursor,
    // is advanced to the next row of the result.  The cursor initially is
    // positioned before the first row.
    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

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

Следующий код является примером транзакции базы данных :

boolean autoCommitDefault = conn.getAutoCommit();
try {
    conn.setAutoCommit(false);

    /* You execute statements against conn here transactionally */

    conn.commit();
} catch (Throwable e) {
    try { conn.rollback(); } catch (Throwable e) { logger.warn("Could not rollback transaction", e); }
    throw e;
} finally {
    try { conn.setAutoCommit(autoCommitDefault); } catch (Throwable e) { logger.warn("Could not restore AutoCommit setting",e); }
}

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

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Mydb1 {
   static String URL = "jdbc:mysql://localhost/mydb";

   public static void main(String[] args) {
      try {
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = DriverManager.getConnection(URL, "root", "root");
        Statement stmt = conn.createStatement();
      
        String sql = "INSERT INTO emp1 VALUES ('pctb5361', 'kiril', 'john', 968666668)";
        stmt.executeUpdate(sql);
           
        System.out.println("Inserted records into the table...");
      } catch (Exception e) {
        e.printStackTrace();
      }
   }
}

Драйверы 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).

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

Цитаты [ править ]

  1. Перейти обратно: Перейти обратно: а б «Sun Ships JDK 1.1 — Javabeans включены» . www.sun.com . Сан Микросистемс . 19 февраля 1997 г. Архивировано из оригинала 10 февраля 2008 г. Проверено 15 февраля 2010 г. 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. Перейти обратно: Перейти обратно: а б с д Бай 2022 , с. 74.
  10. ^ Bai 2022 , стр. 122–124, §4.2.3.5 Подробнее о методах выполнения.
  11. Перейти обратно: Перейти обратно: а б с Bai 2022 , стр. 72–74, §3.2 Компоненты и архитектура JDBC.
  12. ^ Хорстманн 2022 , §5.5.3 Экранирование SQL.
  13. Перейти обратно: Перейти обратно: а б Bai 2022 , стр. 122–124, §4.2.3.5 Компоненты и архитектура JDBC.
  14. ^ Бай 2022 , с. 83, §3.5.1 Источник данных JDBC.
  15. ^ «Java JDBC API» . docs.oracle.com . Проверено 22 марта 2018 г.
  16. ^ Гринвальд, Рик; Стаковяк, Роберт; Стерн, Джонатан (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 на том же сервере.
  17. ^ «Драйверы JDBC — программное обеспечение CData» . Программное обеспечение CData . Проверено 22 марта 2018 г.
  18. ^ «Драйверы JDBC — программное обеспечение CData» . Программное обеспечение CData . Проверено 22 марта 2018 г.
  19. ^ «Новый драйвер JDBC типа 5 — DataDirect Connect» .
  20. ^ «Доступ к внешним базам данных из RPG с помощью JDBCR4, суть дела» . 28 июня 2012 года . Проверено 12 апреля 2016 г.
  21. ^ Суале Фатехи. «СхемаКраулер» . Гитхаб .

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

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 98bf7a7813dda9f617ca272c91b8322d__1714013580
URL1:https://arc.ask3.ru/arc/aa/98/2d/98bf7a7813dda9f617ca272c91b8322d.html
Заголовок, (Title) документа по адресу, URL1:
Java Database Connectivity - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)