SQL/CLI: JDBC (Java DataBase Connectivity)
Общие сведения о JDBC
JDBC — это набор реляционных объектов и методов взаимодействия с источниками данных. JDBC является частью пакета API Enterprise JavaSoft и, следовательно, частью реализации виртуальной машины Java(JVM).
JDBC, также как и ODBC, OCI и BDE, базируется на X/Open SQL/CLI. Концепция взаимодействия определены в виде интерфейсов Java.
Для обращения к конкретной СУБД необходим соответствующий JDBC-драйвер, который представляет собой набор классов, реализующих JDBC-интерфейсы.
ТИП | КЛАСС |
Драйвер | java.sql.Driver, java.sql.DriverManager, java.sql.DriverPropertyInfo |
Связь (соединение) | java.sql.Connection |
Операторы | java.sql.Statement, java.sql.PreparedStatement, java.sql.CallableStatement |
Результат | java.sql.ResultSet |
Ошибки/Предупреждения | java.sql.SQLException, java.sql.SQLWarning |
Метаданные | java.sql.DatabaseMetaData, java.sql.ResultSetMetaData |
Дата/Время | java.sql.Date, java.sql.Time, java.sql.Timestamp |
Разное | java.sql.Numeric, java.sql.Types, java.sql.DataTruncation |
Комплектация пакета JDBC
Интерфейс JDBC появился в декабре 1996 года с выходом в свет JDK 1.1., и в поставку входят три компонента:
• JDBC driver manager.
• Средства для тестирования драйверов JDBC.
• Мост JDBC-ODBC (JdbcOdbc.DLL).
Особенности взаимодействия с БД
• JDBC предполагает передачу запроса к БД в виде строки. Таким образом, могут использоваться конструкции SQL, специфичные для данной БД и/или для ее JDBC-драйвера.
• JDBC определяет работу по принципу «одно действие – один метод», поэтому используется относительно большое число простых методов, вместо нескольких с большим числом параметров-флагов.
• JDBC предполагает строгую статическую типизацию SQL-операторов для обеспечения большей защиты от ошибок на этапе компиляции в байт-код. Однако выполняются и операторы DDL, являющиеся по своей природе динамическими.
Типы драйверов JDBC
• JDBC-ODBC Bridge
• Native API as basis
• JDBC-Net
• Native protocol as basis
Категория драйверов | Полностью на JAVA? | Сетевой протокол |
Мост JDBC-OCBC | Нет | Непосредственно |
«Родной» API в качестве основы | Нет | Непосредственно |
JDBC-Net | Да | Требуется «коннектор» |
«Родной» сетевой протокол | Да | Непосредственно |
Компания производитель | Тип | Поддержка базы данных |
Agava Software Design | 3 | Oracle, Sybase, Informix и другие |
Agava Software | 3 | Unisys A series DMSII database |
Caribou Lake Software | 3 | Ingres |
IBM | 2/3 | IBM DB2 Version 2 |
IBM | 4 | DB2 для OS/400 |
Hit Software | 5 | DB2, DB2/400 |
IDS Software | 3 | Oracle, Sybase, MS SQL Server, MS Access, Informix, Watcom и другие |
Imaginary | 4 | mSQL |
InterBase | 3 | InterBase |
JavaSoft | 1 | Многие типы баз данных, используя механизм ODBC |
Liberty Integration Software | 3 | Most PICK flavors including VMARK, Unidata, General Automation, PICK systems |
OpenLink | 3 | Oracle, Informix, Sybase, MS SQL Server, CA-Ingres, Progress, Unify, PostgreSQL, Solid, and others via ODBC |
Oracle Corporation | 2/4 | Oracle |
SAS Institute Inc. | 3/4 | SAS и via SAS/ACCESS, Oracle, Informix, Ingres и ADABAS |
SCO | 3/4 | Informix, Oracle, Ingres, Sybase, Interbase |
Simba Technologies Inc. | 3, 4 | Oracle, Sybase, MS SQL |
Solid Information Technology | Solid Sever | |
Sybase Inc. | 3/4 | Sybase SQL Server, SQL Anywhere, Sybase IQ, Replication Server servers via Sybase OmniCONNECT |
Trifox Inc. | 3 | ADABAS, DB2, Informix, Ingres, Oracle, Rdb, SQL Server, Sybase и системы типа GENESIS |
WebLogic | 3 | Многие типы баз данных, используя механизм ODBC |
Yard Software GmbH | 4 | YARD-SQL Database |
JDBC-ODBC Bridge
В таких драйверах каждое обращение к JDBC преобразуется в соответствующие вызовы функций ODBC.
Для использования драйверов этого типа необходимо наличие на каждом компьютере-клиенте драйверов ODBC для требуемого источника данных и OS Windows.
Драйверы были удобны для применения на начальном этапе, когда других JDBC драйверов еще не было.
Существует опасность того, что драйверы ODBC могут нарушить функционирование виртуальной Java-машины и вызвать ошибку в Java-программе.
Итог: Вызовы С – кода из языка Java страдают плохой защищенностью, гибкостью и переносимостью приложений.
Native API as basis
Этот тип драйверов преобразуют вызовы JDBC в вызовы клиентского API для Oracle, Sybase, Informix, DB2 и т. Д.
Как и мост JDBC-ODBC, этот тип драйверов требует, чтобы на каждой клиентской станции был установлен некоторый исполняемый не-Java код (обычно на C) и платформонезависимость Java теряется.
Например, «толстый» OCI-JDBC драйвер для Oracle, требующий установки SQL*NET(Net8).
Обычно клиент и сервер размещены на одной машине, иначе нужна программа, обеспечивающая связь между компьютерами.
JDBC-Net
Эти драйверы транслируют программные вызовы JDBC в независимый от СУБД сетевой протокол, который затем транслируется в протокол СУБД специальным промежуточным сервером. Это сетевое промежуточное серверное приложение соединяет клиентов на чистой Jave со множеством различных БД.
Этот специальный сетевой протокол зависит от конкретного поставщика, то есть жестко не стандартизован.
Это наиболее гибкий и защищенный в агрессивной среде Интернета способ.
Драйверы этого типа включают в себя два компонента: клиент и сервер.
Native protocol as basis
Этот тип драйверов преобразует программные вызовы в сетевой протокол, используемый СУБД непосредственно. Становится возможным прямое подключение клиентских машин к серверу БД.
Эти драйверы находят практическое применение в Интернет среде. Так как многие такие протоколы патентованы (являются собственностью поставщиков), то за разработку таких драйверов отвечают поставщики СУБД.
Например, «тонкий» JDBC Thin для Oracle позволяет обойтись без установки сетевого протокола Net8 на клиентском компьютере. Удобен для апплетов и сервлетов. Работают быстрее драйверов JDBC-Net.
Подключение к источнику данных через JDBC
JDBC не имеет интерактивного менеджера драйверов и подключение к нужному источнику производится только программно.
Фактически хранение настроек подключения происходит в программе на Java.
Пример загрузки драйвера выглядит так:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) ;
Cоздание объекта-соединение:
Con=DriverManager.getConnection(“jdbc:odbc:myBase”; UID=”User”; PWD=”Pwd”);
JDBC API
JDBC API – это прикладной интрефейс Java для выполнения SQL-запросов. Он состоит из множества классов и интерфейсов, написанных на языке Java.
SQL type | Java type |
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | Java.math.BigDecimal |
DECIMAL | Java.math.BigDecimal |
BIT | Boolean |
TINYINT | Byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | Double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
Oracle JDBC
Особенности JDBC в Oracle:
• Наличие объектных типов.
• Наличие JDBC-OCI Driver (Java Native Interface).
• JDBC Server-Side Internal Driver.
• Наличие JDBC Server Side Thin Driver.
import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
class JDBCVersion {
public static void main (String args[])
throws SQLException {
OracleDataSource ods=new OracleDataSource();
ods.setURL(“jdbc:oracle:thin:scott/tiger@host:port/service”);
Connection conn=ods.getConnection();
//Create Oracle DatabaseMetaData object
DatabaseMetaData dmd=conn.getMetaData();
//gets driver info:
System.out.println(“JDBC driver version is”+dmd.getDriverVersion());}}