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());}}


Оставить комментарий





Статистика

Рейтинг@Mail.ru